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