SQL Server数据库

时间:2016-08-04 15:19:26

标签: c# sql-server entity-framework transactions

我们有一些实例,其中多个应用程序依赖于其他应用程序的已完成工作。我们通过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);
}

在调试器中观察创建的事务时会出现以下情况:

Code transaction

但是,SQL Server Profiler显示另一张图片:

Db transaction

这怎么可能,我们如何防止它??

更新

重写我的测试以使用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();
        }

输出显示我所请求的事务隔离级别不受尊重

enter image description here

0 个答案:

没有答案