实体框架:TransactionScope具有不同的IsolationLevel

时间:2015-11-12 14:33:24

标签: c# .net entity-framework transactions

我正在尝试在域级别使用TransactionScope,因此我可以跨(可能)多个存储库操作数据,同时保存同一事务中的所有数据。

我有以下保存方法:

public void Save(MyEntity source)
{
    using (var scope = new TransactionScope())
    {
        var context = new MyEFEntities(environment.ConnectionString);

        this.Repository.Add(source.ToDbMyEntity(), context);

        context.SaveChanges();

        scope.Complete();
    }
}

但我在.SaveChanges()上收到以下错误:

  

为TransactionScope指定的事务有不同的   IsolationLevel比范围请求的值。参数名称:   transactionOptions.IsolationLevel

造成这种情况的原因是什么?

1 个答案:

答案 0 :(得分:3)

我认为Entity框架的默认隔离级别是数据库的默认隔离级别,例如SqlServer的默认隔离级别为READ COMMITTED,而对于TransactionScope,默认隔离级别为Serializable所以当您尝试时要在using (var scope = new TransactionScope())块内更改它会引发错误。尝试这样的事情:

var transactionOptions = new TransactionOptions();
transactionOptions.IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted;
using (var scope = new TransactionScope(TransactionScopeOption.Required, transactionOptions));