背景:我有一个ASP.NET MVC应用程序,它使用动作过滤器在TransactionScope中包装控制器动作。
进一步下游(在我的基础设施层);我想打开一个新的ADO.NET连接(与我的外部TransactionScope相同的数据库,如果它是相关的)并让它参与自己的事务 - 而不是绑定到在控制器级别启动的当前TransactionScope;我该怎么做呢?
答案 0 :(得分:1)
你传递了TransactionScopeOption.RequiresNew
:
TransactionOptions to = new TransactionOptions;
to.IsolationLevel = <desiredIsolationLevel>;
using (TransactionScope scope = new TransactionScope(
TransactionScopeOption.RequiresNew, to))
{
... do work here
scope.Complete ();
}
但要小心,那座桥下面有龙。如果包含范围具有来自其自己的事务范围的未决的未提交写入并且您尝试触摸内部独立事务(新范围)中的相同实体,则特别容易与自己发生死锁。