所以我有一个简单的表,其中包含一个在INSERT上逐步生成的ID字段。
我已经在NHibernate中设置了映射以反映这一点:
<id name="ID">
<generator class="identity" />
</id>
一切正常。
麻烦的是,我需要在保存新模型后才能获取生成的ID,以便在其他地方使用:
var model = new MyModel();
session.SaveOrUpdate(model);
但是在这个阶段,model.ID == null,而不是ID。
有什么想法吗?
安东尼
答案 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;