NHibernate:Session.Save 和 Transaction.Commit

Posted

技术标签:

【中文标题】NHibernate:Session.Save 和 Transaction.Commit【英文标题】:NHibernate: Session.Save and Transaction.Commit 【发布时间】:2010-11-22 21:38:58 【问题描述】:

Session.SaveTransaction.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的主要内容,如果未能解决你的问题,请参考以下文章

NHibernate 可以在没有迭代器的情况下保存集合吗?

Nhibernate 在子集合更新时未检测到父项的更改

Hibernate 中的 session.persist() 和 session.save() 有啥区别?

session.save() 方法的语法错误

session_save_path 设置失败

休眠 session.save() 总是返回 1