1

在交易中,我有以下内容,MyEntities是我的上下文:

TransactionOptions options = new TransactionOptions();
options.Timeout = TimeSpan.FromMinutes(1);
options.IsolationLevel = IsolationLevel.Serializable;

 using(TransactionScope scope =

      new TransactionScope(TransactionScopeOption.Required, options))

{
    //Do something to database table MyEntities.Users

}

是否使我的隔离级别可序列化,这样如果我的代码中的其他任何地方我都有类似的东西

MyEntities.Users.First(x=>x.name == "test")

该行代码将一直等到事务范围完全完成,或者该代码行是否需要包含在using(TrnasactionScope...语句中以使其遵循事务隔离级别的规则。

4

1 回答 1

5

隔离级别本身什么都不做;重要的是当您开始查询数据时会发生什么。特别是,您开始到处留下读锁和键范围锁。如果另一个查询命中其中一个锁并且正在读取,那很好:读取锁通常是兼容的。显然,另一个 SPID 的隔离级别也很重要 - 未提交的读取 SPID 不会关心您正在进行的操作,而更高的隔离会。

当其中一个 SPID 开始写入数据时,开始变得更加复杂。如果多个 SPID 已经对同一数据进行了读锁,这可能会导致死锁。

但不:事务范围不会阻止其他所有内容,尤其是当它们只是读取时。对于它的作用......这很复杂,只能根据具体情况进行分析。

于 2012-09-09T19:00:58.113 回答