你知道,为了实现在web应用中我们经常创造的Application_BeginRequest会话和Application_EndRequest全球事件处理程序关闭它的session-per-Web的请求。然后,每次我们访问数据库时,都会通过GetCurrentSession获取当前会话,而不是通过OpenSession打开新会话。我可以同时使用session-per-web-request和TransactionScope吗?
那么,有没有机会在web应用程序同时使用的session-per-Web的请求和TransactionScope的?据NHibernate的3.0食谱(第117页),它说,会议已被释放后应该发生在调用TransactionScope.Complete。令人惊讶的是不说的这种情况虽然两者的session-per-Web的请求和使用的TransactionScope在同一章中讨论的任何单词。
using (var scope = new TransactionScope())
{
using (var session = sessionFactory.OpenSession())
using (var tx = session.BeginTransaction())
{
// do something here
}
scope.Complete();
}
是否有充分的理由使用TransactionScope而不是NHibernate Transaction? –
TransactionScope不会取代NHibernate Transaction,它会封装事务。 –