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

本文关键字:IsolationLevel 框架 TransactionScope 实体 | 更新日期: 2023-09-27 18:21:44

我正在尝试在域级别使用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

是什么原因造成的?

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

我认为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));