我们注意到,我们所有的 INSERT/UPDATE 语句都是使用 EF4 的 SaveChanges 以 READ UNCOMITTED 隔离级别执行的。
在我们的 UnitOfWork 类中,这是提交更改(插入/更新)的代码:
public int Commit()
{
return ObjectContextManager.GetObjectContext().SaveChanges();
}
我们希望使用 Entity Framework 4 提交的所有 INSERTS 和 UPDATES 都将在 SNAPSHOT 隔离级别下提交。
尽管它似乎不起作用(SQL 端根本没有插入),但我们已经尝试用 Scope 围绕 SaveChanges() 。
public int Commit()
{
int ret;
var scope = new System.Transactions.TransactionScope(
// a new transaction will always be created
TransactionScopeOption.RequiresNew,
// we will allow volatile data to be read during transaction
new TransactionOptions()
{
IsolationLevel = System.Transactions.IsolationLevel.Snapshot
}
);
using (scope)
{
ret = ObjectContextManager.GetObjectContext().SaveChanges();
scope.Complete();
}
return ret;
}
我们做错了什么?