在EF4上使用SNAPSHOT隔离保存更改

时间:2013-11-20 14:09:27

标签: c# sql-server entity-framework-4 isolation-level transaction-isolation

我们注意到所有的INSERT / UPDATE语句都是使用EF4的SaveChanges以READ UNCOMITTED隔离级别执行的。

在我们的UnitOfWork类中,这是提交更改的代码(插入/更新):

public int Commit()
{
    return ObjectContextManager.GetObjectContext().SaveChanges();
}

我们希望使用Entity Framework 4提交的所有INSERTS和UPDATES都将在SNAPSHOT隔离级别下提交。

我们已尝试使用Scope包围SaveChanges(),尽管它似乎不起作用(在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;
        }

我们做错了什么?

0 个答案:

没有答案