1

我们注意到,我们所有的 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;
        }

我们做错了什么?

4

0 回答 0