.net 视图中的会话和TransactionScope
我们有一个使用NHibernate的asp.net webforms应用程序。以下是一些细节:.net 视图中的会话和TransactionScope,.net,asp.net,nhibernate,transactions,.net,Asp.net,Nhibernate,Transactions,我们有一个使用NHibernate的asp.net webforms应用程序。以下是一些细节: 我们需要分布式事务,因为我们写入数据库和队列 因为这是一个web应用程序,所以我们使用“视图中的推荐会话”模式。我们有一个HTTPModule,它在BeginRequest事件上打开NHibernate会话,在EndRequest事件上关闭它 在请求流中,我们有几个单独的时刻需要进行事务性工作。为此,我们使用TransactionScope 所以基本上,发生的是这样的(伪代码): 然而,我们现在遇
- 我们需要分布式事务,因为我们写入数据库和队列
- 因为这是一个web应用程序,所以我们使用“视图中的推荐会话”模式。我们有一个HTTPModule,它在BeginRequest事件上打开NHibernate会话,在EndRequest事件上关闭它
- 在请求流中,我们有几个单独的时刻需要进行事务性工作。为此,我们使用TransactionScope
- 在transactionscope中使用NHibernate事务
- 在transactionscope中创建会话
- 您必须使用NH事务(
)session.BeginTransaction()
- NH事务将自动登记到TransactionScope中
- 您不必在TransactionScope中创建会话
UnitOfWorkScope的概念将NHibernate与TransactionScope结合使用的方法;这可能是您正在寻找的指南。您能告诉我为什么吗?我找到的所有示例都是在TransactionScope中创建会话的。这就是它的工作原理(称之为实现细节)。我不知道您在哪里见过这些示例(link?),但如果它们创建会话而不是NH事务,那么它们就错了。
using(var session = sessionFactory.CreateSession()){
using(var tx1 = new TransactionScope(){
//work work work
tx1.Complete();
}
//other work
using(var tx2 = new TransactionScope(){
//work work work
tx2.Complete();
}
}