INSERT/UPDATE ステートメントはすべて、EF4 の SaveChanges を使用して READ UNCOMITTED 分離レベルで実行されていることがわかりました。
UnitOfWork クラスでは、これは変更 (挿入/更新) をコミットするコードです。
public int Commit()
{
return ObjectContextManager.GetObjectContext().SaveChanges();
}
Entity Framework 4 を使用してコミットされたすべての INSERTS および UPDATES は、SNAPSHOT 分離レベルでコミットされることを望みます。
SaveChanges() を Scope で囲んでみましたが、うまくいかないようです (SQL 側ではまったく挿入されません)。
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;
}
私たちは何を間違っていますか?