我们有一些实例,其中多个应用程序依赖于其他应用程序的已完成工作。我们通过Entity Framework DatabaseContext
的Database属性启动并提交我们的事务。
像这样:
public void StartTransaction(IsolationLevel isolationLevel = IsolationLevel.Serializable)
{
CheckTransactionNotActive();
if (!Database.Connection.State.Equals(ConnectionState.Open))
{
Database.Connection.Open();
}
_transaction = Database.BeginTransaction(isolationLevel);
}
在调试器中观察创建的事务时会出现以下情况:
但是,SQL Server Profiler显示另一张图片:
这怎么可能,我们如何防止它??
更新
重写我的测试以使用TransactionScope: 以下代码从多个任务执行
var context = new MyDbContext();
var myRepository = new MyRepository(context);
using (
TransactionScope scope =
new TransactionScope(
TransactionScopeOption.RequiresNew,
new TransactionOptions { IsolationLevel = System.Transactions.IsolationLevel.Serializable })
)
{
var x = my.GetAll().First();
Console.WriteLine("before " + x.Count);
x.count = x.count + 1;
Console.WriteLine("after " + x.Count);
context.SaveChanges(false);
scope.Complete();
}
输出显示我所请求的事务隔离级别不受尊重