NHibernate:Session.Save和Transaction.Commit

时间:2009-08-26 07:08:51

标签: nhibernate

Session.SaveTransaction.Commit之间是否存在差异?

什么时候应该使用哪个?

似乎有时Session.Save必须与Transaction.Commit一起使用,有时不会。谁能告诉为什么会这样呢?

1 个答案:

答案 0 :(得分:14)

他们是不同的 - Session.Save保存一个对象,Transaction.Commit提交一堆工作(多个获取,加载,保存,更新等)。

你想要同时使用它们。这是一个快速解释,其中包含更多阅读的链接。 NHibernate文档说明如下:

  

ISession中,每个数据库操作都发生在事务中   隔离数据库操作(甚至是只读操作)。

如果您没有明确定义事务,则每次读取或写入数据库时​​都会隐式创建一个事务。不是很有效率。因此,即使您只是阅读,您也希望将所有内容放入事务中,并在完成后提交事务。 Ayende Rahien在this blog post进一步解释。

当您查看某些代码示例时,可能看起来人们没有使用事务,但他们可能只是在您正在查看的代码之外开始/提交事务。例如,在我的ASP.Net MVC应用程序中,我使用动作过滤器(TransactionAttribute)来处理Controller Actions之外的事务。