NHibernate:Session.Save和Transaction.Commit

Gra*_*ton 13 nhibernate

有没有之间的差异Session.SaveTransaction.Commit

什么时候应该用哪个?

似乎有时Session.Save必须结合使用Transaction.Commit,有时必须使用.任何人都可以告诉为什么会这样吗?

小智 15

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

你会想要同时使用它们.这是一个快速解释,带有更多阅读的链接.NHibernate文档说明如下:

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

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

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