NHibernate ISession刷新:何时何地使用它,为什么?
  让我彻底困惑的一件事是使用session.Flush ,与session.Commit和session.Close一起使用。 
  有时session.Close可以工作,例如,它会提交我需要的所有更改。  我知道当我有一个事务时需要使用提交,或者有多个创建/更新/删除的工作单元,以便在发生错误时选择回滚。 
  但有时我真的被session.Flush背后的逻辑所session.Flush 。 session.Flush 。  我已经看到你有一个session.SaveOrUpdate()例子session.SaveOrUpdate()后跟一个刷新,但是当我删除刷新它无论如何工作正常。  有时候我在Flush语句中遇到错误,说会话超时,删除它确保我没有遇到那个错误。 
有没有人有一个很好的指导方针,以便在何时何地使用Flush? 我已经检查了NHibernate的文档,但我仍然无法找到一个简单的答案。
简述:
Close() ,而不是包装上的通话ISession一个内部using的语句或管理您的ISession其他地方的生命周期 。 从文档:
  有时, ISession将执行将ADO.NET连接的状态与内存中的对象状态同步所需的SQL语句。  这个过程,刷新,默认情况下发生在以下几点 
Find()或Enumerable()一些调用中, NHibernate.ITransaction.Commit() ISession.Flush() SQL语句按以下顺序发布
ISession.Save()保存相应的对象 ISession.Delete()删除相应的对象 (使用本地ID生成的对象在保存时会插入一个例外。)
  除非你明确Flush() ,否则绝对不能保证Session何时执行ADO.NET调用,只有执行它们的顺序 。  但是,NHibernate确保ISession.Find(..)方法永远不会返回陈旧的数据;  也不会返回错误的数据。 
  可以更改默认行为,以便更频繁地进行刷新。  FlushMode类定义了三种不同的模式:只在提交时刷新(并且仅在使用NHibernate ITransaction API时),使用已解释的例程自动刷新,或者不会刷新,除非明确调用Flush() 。  最后一种模式对长时间运行的工作单元非常有用,其中ISession保持打开状态并长时间断开连接。 
...
另请参阅本节:
结束会议涉及四个不同的阶段:
冲洗会议
  如果您碰巧使用ITransaction API,则无需担心此步骤。  当事务被提交时,它将被隐含地执行。  否则,您应该调用ISession.Flush()以确保所有更改都与数据库同步。 
提交数据库事务
如果您使用的是NHibernate ITransaction API,则如下所示:
tx.Commit(); // flush the session and commit the transaction
  如果您自己管理ADO.NET事务,则应该手动执行Commit() ADO.NET事务。 
sess.Flush();
currentTransaction.Commit();
如果您决定不提交更改:
tx.Rollback();  // rollback the transaction
要么:
currentTransaction.Rollback();
如果你回滚事务,你应该立即关闭并放弃当前会话,以确保NHibernate的内部状态是一致的。
关闭ISession
  对ISession.Close()调用标志着会话结束。  Close()的主要含义是ADO.NET连接将被会话放弃。 
tx.Commit();
sess.Close();
sess.Flush();
currentTransaction.Commit();
sess.Close();
  如果您提供了自己的连接,则Close()将返回对其的引用,以便您可以手动关闭它或将其返回到池。  否则, Close()将其返回到池中。 
  从NHibernate 2.0开始,数据库操作需要事务。  因此, ITransaction.Commit()调用将处理任何必要的刷新。  如果由于某种原因你没有使用NHibernate事务,那么将不会自动刷新会话。 
有时,ISession将执行将ADO.NET连接的状态与内存中的对象状态同步所需的SQL语句。
并始终使用
 using (var transaction = session.BeginTransaction())
 {
     transaction.Commit();
 }
在提交更改之后,将此更改保存到数据库中,我们使用transaction.Commit();
链接地址: http://www.djcxy.com/p/23229.html上一篇: NHibernate ISession Flush: Where and when to use it, and why?
