Entity Framework:TransactionScope具有不同的隔离级别

4

我正在尝试在领域层使用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指定的事务与范围请求的值具有不同的隔离级别。参数名称:transactionOptions.IsolationLevel

这是什么原因导致的呢?


你能告诉我你的数据库当前的“隔离级别”吗?https://dev59.com/_XNA5IYBdhLWcg3wPbSe - Alireza
1个回答

4

我认为Entity Framework的默认隔离级别是数据库的默认级别,例如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));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接