NHibernate:Session.Save 和 Transaction.Commit
Posted
技术标签:
【中文标题】NHibernate:Session.Save 和 Transaction.Commit【英文标题】:NHibernate: Session.Save and Transaction.Commit 【发布时间】:2010-11-22 21:38:58 【问题描述】:Session.Save
和 Transaction.Commit
有区别吗?
什么时候应该使用哪个?
似乎Session.Save
有时必须与Transaction.Commit
一起使用,有时不需要。谁能说出为什么会这样?
【问题讨论】:
Transmission.Commit 还是 Transaction.Commit? 【参考方案1】:它们是不同的——Session.Save
保存一个对象,Transaction.Commit
提交一堆工作(多次获取、加载、保存、更新等)。
你会想要同时使用这两个。这是一个快速解释,带有更多阅读链接。 NHibernate 文档说明如下:
在
ISession
中,每个数据库操作都发生在事务中 隔离数据库操作(甚至是只读操作)。
如果您没有明确定义您的事务,那么每次您读取或写入数据库时都会隐式创建一个事务。效率不是很高。因此,即使您只是在阅读,您也希望将所有内容都放在一个事务中,并在完成后提交该事务。 Ayende Rahien 在this blog post 中进一步解释。
当您查看那里的一些代码示例时,似乎人们没有使用事务,但他们可能只是在您正在查看的代码之外开始/提交事务。例如,在我的 ASP.Net MVC 应用程序中,我使用操作过滤器 (TransactionAttribute) 来处理控制器操作之外的事务。
【讨论】:
很好的解释:TransactionAttribute 建议 +1以上是关于NHibernate:Session.Save 和 Transaction.Commit的主要内容,如果未能解决你的问题,请参考以下文章