NHibernate:保存模型后,我可以访问生成的主键吗?

NHibernate:保存模型后,我可以访问生成的主键吗?,nhibernate,Nhibernate,所以我有一个简单的表,它有一个ID字段,在INSERT时递增生成 我在NHibernate中设置了映射以反映这一点: <id name="ID"> <generator class="identity" /> </id> 但是在这个阶段model.ID==null,而不是ID 有什么想法吗 Anthony据我所知,标识是由数据库生成的,由于SaveOrUpdate()实际上并不保存您的模型,因此ID将为空。一旦您将会话内容提交给DB,这应该会发生变化。据

所以我有一个简单的表,它有一个ID字段,在INSERT时递增生成

我在NHibernate中设置了映射以反映这一点:

<id name="ID">
  <generator class="identity" />
</id>
但是在这个阶段model.ID==null,而不是ID

有什么想法吗


Anthony

据我所知,标识是由数据库生成的,由于SaveOrUpdate()实际上并不保存您的模型,因此ID将为空。一旦您将会话内容提交给DB,这应该会发生变化。

据我所知,标识是由数据库生成的,而且由于SaveOrUpdate()实际上并不保存您的模型,因此ID将为空。一旦将会话内容提交到数据库,这应该会更改。

您需要刷新会话,以便将更改持久化到数据库。您可以通过调用
session.Flush()
或更好地使用事务:

using (var txn = session.BeginTransaction())
{
    session.SaveOrUpdate(model);
    txn.Commit();
}

您需要刷新会话,以便将更改持久化到数据库。您可以通过调用
session.Flush()
或更好地使用事务:

using (var txn = session.BeginTransaction())
{
    session.SaveOrUpdate(model);
    txn.Commit();
}

如果在映射中设置了
Name
属性,则NHibernate将在保存实体后为您设置Id

如果在映射中设置了
Name
属性,则NHibernate将在保存实体后为您设置Id

保存主键后,主键是可访问的,因为它生成了客户端,或者在使用它将发出的标识时立即插入

var model = new MyModel();

var id = session.Save(model);
// or
session.SaveOrUpdate(model);
var id = model.Id;

保存主键后,主键是可访问的,因为它生成了clientside,或者在使用identity时,它将立即发出insert

var model = new MyModel();

var id = session.Save(model);
// or
session.SaveOrUpdate(model);
var id = model.Id;