首页
学习
活动
专区
工具
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 属性设置返回值类型。

63200
  • 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.2K40

    Python3 操作 MySQL 插入一条数据并返回主键 id实例

    Python 中貌似并没有直接返回插入数据 id 操作(反正我是没找到),但是我们可以变通一下,找到最新插入数据 #!...*- import pymysql db = pymysql.connect(**db_conf) cursor = db.cursor() cursor.execute(sql) # 最后插入主键...id print(cursor.lastrowid) # 最新插入主键id print(conn.insert_id()) conn.commit() 使用 cursor.lastrowid...中并没有所谓真正多线程,建议使用多进程 补充拓展:mysql中插入一条数据后得到插入主键id值 ** 当我们涉及多表进行插入操作是,常常需要在程序中等到刚刚插入数据主键Id, 便与进行多表关联...="id" SELECT LAST_INSERT_ID() AS id </selectKey 以上这篇Python3 操作 MySQL 插入一条数据并返回主键 id实例就是小编分享给大家全部内容了

    2.9K10

    NHibernate详解

    是public,但这个对NHibernate不是必要.它可以使用public, protected, internal或者甚至是private来持久化数据。...最易于管理办法是为每一个类写一个映射文件,如果你命名它是YourObject.hbm.xml 并且把它放在和类同一个目录里,NHiberante将会使得事情简单起来。...内嵌generator 标签告诉NHibernate 如何生成主键(它将恰当为你生成主键,不管你指定何种类型,但你必须告诉它)。...最直接办法是在你应用程序配置文件(App.config)里设置一个NHibernate配置节。配置如下: <?xml version=”1.0″ encoding=”utf-8″ ?...那里有一堆属性你需要调整来确定如何让NHibernate来访问数据库。再次说明,你可以在文档里获取更多信息。 NHibernate使用log4net来记录内部发生一切。

    67930

    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

    使用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

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

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

    1.1K20

    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);      查看数据库中,有没有一条数据保存了

    35030

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

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

    1.2K20

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

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

    3.5K51
    领券