我已经阅读了Nhibernate一段时间了,并且一直在尝试将它用于我正在实施的网站。我阅读了关于NHibernate最佳实践的the article by Billy McCafferty,但我没有看到任何关于处理事务的最佳位置的指示。
我想过把这些代码放在数据访问对象(DAO)中,但后来我不知道如何处理使用多个DAO的情况。在NHibernate应用程序中放置事务代码的最佳位置是什么?
答案 0 :(得分:11)
基于Ayende,您可能需要明确地为所有人添加交易,甚至是搜索。请点击这里: http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions
答案 1 :(得分:10)
这实际上取决于您的环境。例如,我们在ASP.Net站点上使用Open-Session-In-View(Java链接,但模式在.Net中是相同的)模式,并使用HttpModule来控制会话和事务。 HttpModule打开会话并在BeginRequest事件中启动事务,然后提交事务并在EndRequest事件中关闭会话。
不同的环境和沟通模式将导致不同的会话/交易管理策略。
对NHibernate Users Group以及网络上的各种策略进行了大量讨论。
答案 2 :(得分:0)
最简单的方法是使用
中描述的智能交易http://rajputyh.blogspot.com/2011/02/nested-transaction-handling-with.html
它使用流行的NHibernateSessionManager并编写一个简单的类来确保“在需要时打开事务”而不必担心父逻辑和子逻辑处理事务的内容。