流畅的NHibernate获取已保存对象的Id

Mat*_*ert 5 nhibernate asp.net-mvc fluent-nhibernate

我在Asp.net MVC应用程序中使用Fluent NHibernate.我将它设置为在每个请求上启动会话和事务,并在请求结束时提交事务.但是,我想要做的是保存一个对象(在这种情况下,一个新的"公司"),然后重定向到该新公司的详细信息页面.如何获取新公司的ID以便我可以重定向?如果我在session.Save(公司)之后得到Id,则为null.这是有意义的,因为它尚未提交,但是,似乎应该有一个相对简单的方法来做到这一点,而不提交当前的事务并开始一个新的事务.

Lac*_*che 7

当使用瞬态实体调用session.Save()或session.SaveOrUpdate()时,NHibernate会生成一个id.此时,实体的id属性已设置并可以使用.

如果id生成器需要数据库访问,则此时将发生.因此,对于Identity生成器,此时将执行插入以及任何挂起的插入.

否则,插入将处于挂起状态,直到刷新会话,这将发生:

  • 来自Find()或Enumerable()的一些调用
  • 来自NHibernate.ITransaction.Commit()
  • 来自ISession.Flush()


Mat*_*ert 2

好的,问题出在我的代码的其他地方。即使您尚未提交事务或刷新事务,您也可以在保存后立即获取 Id。

感谢大家的回答,但不幸的是,没有一个是完全正确的。