首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

有没有办法用NHibernate返回插入记录的主键?

有办法使用NHibernate返回插入记录的主键。在NHibernate中,可以使用ISession.Save()方法来保存对象,并返回生成的主键。以下是一个简单的示例:

代码语言:csharp
复制
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Dialect;
using NHibernate.Driver;
using NHibernate.Mapping.ByCode;
using NHibernate.Tool.hbm2ddl;
using System;

namespace NHibernateExample
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var configuration = new Configuration();
            configuration.DataBaseIntegration(db =>
            {
                db.ConnectionString = "Server=localhost;Database=test;User Id=root;Password=password;";
                db.Driver<MySqlDataDriver>();
                db.Dialect<MySQL5Dialect>();
            });

            var mapper = new ModelMapper();
            mapper.AddMapping<UserMap>();
            var mapping = mapper.CompileMappingForAllExplicitlyAddedEntities();
            configuration.AddMapping(mapping);

            var sessionFactory = configuration.BuildSessionFactory();
            var session = sessionFactory.OpenSession();

            var user = new User
            {
                Name = "John Doe",
                Email = "john.doe@example.com"
            };

            using (var transaction = session.BeginTransaction())
            {
                var id = session.Save(user);
                transaction.Commit();

                Console.WriteLine($"Inserted record with ID: {id}");
            }
        }
    }
}

在这个示例中,我们创建了一个User对象,并使用ISession.Save()方法将其保存到数据库中。Save()方法返回生成的主键,我们可以将其打印到控制台上。

需要注意的是,Save()方法只适用于具有自动生成主键的实体。如果实体的主键是手动分配的,那么需要使用ISession.Get()方法来获取实体的主键。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

MyBatis框架:第四章:插入记录并返回主键

往数据库插入数据后,返回数据主键信息。有两种方法。 一种:使用insert标签中的useGeneratedKeys属性和keyProperty属性组合使用获取主键信息。...-- 插入用户useGeneratedKeys="true"表示返回生成的主键keyProperty 表示把返回的key注入到返回值的哪个属性中keyProperty="id" 表示把返回的id主键值注入到返回对象的...selectKey 通过前置或后置操作,返回数据的主键值。...插入记录并返回主键主要是在标签中添加一个的作用主要就是为了返回插入记录后,自动生成的主键信息 order 表示执行的顺序。 AFTER 表示在插入之后执行。 BEFORE 在插入之前执行。...keyProperty 属性设置对象的哪个属性接收 resultType 属性设置返回值类型。

64400
  • SQL Server 返回最后插入记录的自动编号ID

    有三个比较类似的功能:他们分别是:SCOPE_IDENTITY、IDENT_CURRENT 和 @@IDENTITY,它们都返回插入到 IDENTITY 列中的值。...当将某行插入 T1 时,触发器被激发,并在 T2 中插入一行。此例说明了两个作用域:一个是在 T1 上的插入,另一个是作为触发器的结果在 T2 上的插入。...@@IDENTITY 返回插入到当前会话中任何作用域内的最后一个 IDENTITY 列值,该值是插入 T2 中的值。...SCOPE_IDENTITY() 返回插入 T1 中的 IDENTITY 值,该值是发生在相同作用域中的最后一个 INSERT。...IDENT_SEED(‘TableName’)–返回指定表的标示字段种子值 返回最后插入记录的自动编号 SELECT IDENT_CURRENT(‘TableName’) 返回下一个自动编号

    2.3K40

    NHibernate联合主键详细示例

    使用NHibernate实现一对多,多对一的关联很是简单,可如果要用复合主键实现确实让人有些淡淡的疼。虽然很淡疼但还是要去抹平这个坑,在下不才,愿意尝试。...方法有问题,返回值应该是联合主键HashCode,优化后的实现如下: public override int GetHashCode() { return (this.Id + "|" + this.GroupNumber...).GetHashCode(); //判断缓存是否存在,已此作为Key } 插入数据时报错,提示SqlParameterCollection的索引无效[索引溢出错误] 原因,最初在设计Parent的时候...,与联合主键共用了一个字段GroupNumber,导致在NHibernate做映射转换的时候会多计算出一个需要填充的值,但SqlParameterCollection中又少一个位置。...,返回值的主键会为Null 联合主键与联合外键字段不能重复,也不能共用 注意重载的GetHashCode和Equals方法 GetHashCode返回实例的惟一标识 Equals判断是否相同实例的具体实现

    1.5K80

    C# 数据操作系列 - 12 NHibernate的增删改查

    不过,有社区爱好者开发了一个名为《Fluent NHibernate》的项目,用来支持NHibernate的流式配置。...NHibernate映射文件 对于NHibernate的映射文件有个约定的名字: .hbm.xml 这里先为大家介绍一下映射文件的格式: 1.1 hibernate-mapping 的说明 的。 1.2.1 id 任何一个映射都必须声明一个数据表的主键,大多数类也必须有一个唯一标示字段用来区分不同的实例。...class="generatorClass"/> name : 对应的属性名 type:对应的NHibernate类型 column:列名 generator:主键生成器,如果不需要参数可以直接在...entities){ foreach (var entity in entities) { Session.Save(entity); } } 查了下,Save会返回当前持久化对象插入时生成的主键

    1.1K20

    使用VS2015和Nhibernate实现与MySql数据库连接,实现增删改查操作

    ,MySQL-FRONT ,Connector/Net(选择.Net&Mono) Nhibernate包可以在VS2015中下载 ,对MySql操作,我用的是MySQL-FRONT,注意要想实现和数据库的链接...先写一个简单的给你定义的数据库中添加一条元素的代码:(不使用Nhibernate的) 前提:先把该用的dll文件,添加到引用里面去不然,会连接不成功,之前下载的Connector/Net(选择.Net&...Nhibernate包来实现一个很简单的对数据增删改查的操作,这一次需要用到我们之前下载的Nhibernate包里面的文件,全部dll文件引入之后,“引用”下面应该是这样的: ?...APengChao做映射 public MapAPengChao() { Id(x => x.Id).Column("Id");//主键映射主键...var userList= session.QueryOver(); return userList.List();//返回查询后的结果

    1.4K30

    Fluent NHibernate之旅二--Entity Mapping

    m => m.ProductID,可能你会说主键的类型,主键还有很多特性,难道不需要配置吗?...回答是当然需要,因为我们这里的属性名与表中的主键名是相同的,所以没有进行设置,如果你数据库的主键名是ID,这里我们只需要Id(m => m.ProductID).ColumnName(“ID”),你可以看到上述映射中的...Product我们映射好了,我们试着测试一下吧,这一次,我们用传统方式插入数据,用Fluent方式获取数据,测试代码如下: [TestMethod] public void NHibernateFactory...二、使用自定义类型映射实体属性 NHibernate支持我们用自定义的类型来映射属性,但因为我是初学,我真的不会,当然我在网上找到了相关的资料,在此也不多说,就说说Fluent的方式吧,在我映射自定义属性的时候...前几天的开篇“Fluent NHibernate之旅一”,反响不是很好,或许大家用NHibernate的真的很少,或许我写的不够好,或许。。。。

    1K90

    Nhibernate入门与demo

    本篇文章阅读对象是:Nhibernate初学者!如果你是Nhibernate的研究者或者已经很熟练的运用Nhibernate请不吝赐教,对本文不足之处进行指教。      带着问题去学习!...3、怎么搭建Nhibernate?      4、怎么使用Nhibernate?      好,我们就带着这几个问题开始我们的Nhibernate的旅程。    ...而Nhibernate就是:.Net环境下实现ORM的技术的一个框架!      第二个问题:      Nhibernate能做什么呢?     ...session.Update(myUser);//更新用户 session.Delete(myUser);//删除用户 User user = session.Get(Id) as User;//根据主键获取用户的...session.Save(myUser); session.Flush(); session.Delete(User);      查看数据库中,有没有一条数据保存了

    37230

    C# 数据操作系列 - 11 NHibernate 配置和结构介绍

    前言 今天是NHibernate的第二篇内容,通过上一篇的内容,我们初步了解了NHibernate的创建和使用。这一篇,我继续探索NHibernate背后的秘密。嗯,就是这样。 1....NHibernate结构 先给小伙伴们放个图: ? 这是NHibernate的整体结构图。...一个ADO.NET连接的封装,用来提供ITransaction的工厂。提供了一个通过主键检索对象和导航链接查询对象时的一级缓存。也就是EF Core中的导航属性。...状态分为以下三种: transient 暂存的、临时的 该状态的对象并没有被持久化上下文捕获到,简单来讲就是刚被创建,还没有从数据库/持久化上下文中获取到主键信息。...这种状态通常是从数据库中获取到数据或者新建的数据附加到了上下文中。 detached 游离态 该状态的对象是从上下文中分离出来的,有了数据库主键,曾经或现在仍然有一条数据库记录与之对应。

    1.3K20

    PQ获取TABLE的单一值作为条件查询MySQL返回数据

    用Python任意刷新Power BI国际版 要说代码嘛,还是灰常简单滴: 当然,你可不要直接用啊,导入的库是本地生成的。详情请阅读以上两篇文章。...还有,把他上个月销售记录附在这张表后面,发我看看。 问题来了:这个时候如果是你,你会怎么完成这个任务?(前提,数据库中有所有人的全部记录。)...那在Power Query中有没有可能设置主键呢?...在UI上并没有设置的位置,但是我们还是可以想其他办法的,有这么几种方式: 1.从带有主键的数据库中导入数据 2.在pq中对table某一列去重,那么这一列就可以作为主键 3.使用Table.AddKey...而这种方式,对比用行号的方式,优势在于不论如何插入数据和改变排序,取值只看主键,所以查询结果不会变。

    3.5K51

    NHibernate教程

    由此可见,NHibernate不仅仅管理.Net类到数据库表的映射,还提供数据查询和获取数据的方法。因此采用NHibernate,可以大幅度减少开发时人工使用SQL处理数据的时间。...二、NHibernate使用步骤 1.为系统引入NHibernate的库,并且配置NHibernate; 2.新建一个将要持久化.Net对象的表; 3.构建一个需要被持久化的.Net类; 4.构建一个可以让...NHibernate知道如何完成ORM映射的XML文件; 5.使用NHibernate的API来编程 三、NHibernate的使用 1....创建一个用于测试的表 这里需要创建3张表,分别用于保存:学生、课程、选课信息。可以用Sql语句来创建,也可以用其他方式创建。...创建.Net类和与其对应的XML文件 (1) 单表的情况 单表的情况就是指该表没有和其他表有关联的情况。这样情况下,可以用软件来辅助产生类和对应的XML文件。

    38710
    领券