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

时间:2010-04-22 10:49:42

标签: nhibernate

所以我有一个简单的表,其中包含一个在INSERT上逐步生成的ID字段。

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

<id name="ID">
  <generator class="identity" />
</id>

一切正常。

麻烦的是,我需要在保存新模型后才能获取生成的ID,以便在其他地方使用:

var model = new MyModel();
session.SaveOrUpdate(model);

但是在这个阶段,model.ID == null,而不是ID。

有什么想法吗?

安东尼

4 个答案:

答案 0 :(得分:4)

您需要刷新会话,以便将更改保留到数据库。您可以通过调用session.Flush()或更好地使用事务来执行此操作:

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

保存主键后,

可以访问,因为它生成了客户端,或者在使用身份时会立即发出插入

var model = new MyModel();

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