【问题标题】:TransactionScopeAsyncFlowOption and Isolation Level?TransactionScopeAsyncFlowOption 和隔离级别?
【发布时间】:2014-05-02 14:01:48
【问题描述】:

我在 WCF 服务中使用 Entity Framework 6.1 并希望用 READ UNCOMMITTED 隔离级别包围我的 SELECT 查询,因为其他批处理更新将插入到我正在读取的表中并且不想锁定这些批处理对表执行 READ 时不会发生更新。这基本上模拟了 SELECT WITH NOLOCK。

此代码也以异步方式使用。因此,我不能简单地使用 TransacactionScope。请注意,我也在使用 .Net 4.5.1 框架。

我可以将 TransactionScope 上的隔离级别设置为 ReadUncommitted,但 TransactionScopeOption 的默认值为 ReadCommitted。我看不到任何改变隔离级别的方法。

有没有办法改变隔离级别?如果我无法设置隔离级别,我的查询是否可以在上述情况下运行。

实际上,如果我不能将隔离级别设置为“NOLOCK”,我什至不需要包含 TransactionScopeAsyncFlowOption。

【问题讨论】:

  • “我可以将 TransactionScope 上的隔离级别设置为 ReadUncommitted,但 TransactionScopeOption 的默认值为 ReadCommitted。我看不到任何更改隔离级别的方法。”这是一个矛盾。你说你可以设置水平,但不知何故你不能。为什么?
  • 我只能使用 TransactionScope 设置隔离级别,但不能使用 TransactionScopeAsyncFlowOption 我想说...
  • 为什么不呢?我不熟悉流选项设置。
  • 它似乎没有隔离设置。如果您在 TransactionScopeAsyncFlowOption 上搜索,您可以阅读。
  • 使用这个ctor怎么样? msdn.microsoft.com/en-us/library/dn249390(v=vs.110).aspx我试图理解这里的问题,因为解决方案似乎太简单了。

标签: wcf entity-framework c#-5.0 isolation-level asynchronous-wcf-call


【解决方案1】:

使用构造函数选项,将 TransactionScopeAsyncFlowOption 指定为第三个参数,而不是第一个:

using (var scope = new TransactionScope(
    TransactionScopeOption.Required,  
    new TransactionOptions { IsolationLevel = IsolationLevel.ReadUncommitted },
    TransactionScopeAsyncFlowOption.Enabled)) 
{
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 2013-01-25
    • 2010-12-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多