我正在尝试在域级别使用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
造成这种情况的原因是什么?
答案 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));