实体框架: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
是什么原因造成的?
我认为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));