【问题标题】:NoLock in Entity Framework实体框架中的 NoLock
【发布时间】:2015-12-27 18:52:04
【问题描述】:

我正在尝试从表中读取记录,即使表因特定事务而被锁定。

我正在使用下面的代码

public async Task<KeyValuePair<String, List<Om_Category>>> CategoryList(Om_Category obj)
{
    try
    {
        using (var transaction = new TransactionScope(
                TransactionScopeOption.Required,
                new TransactionOptions 
                { 
                    IsolationLevel = IsolationLevel.ReadUncommitted 
                },
                TransactionScopeAsyncFlowOption.Enabled))
        {
            using (var categoryContext = new ModelGeneration())
            {

                categoryContext.Configuration.ProxyCreationEnabled = false;
                var data = await categoryContext
                    .tblCategory
                    .ToListAsync();

                transaction.Complete();

                return new KeyValuePair<String, List<Om_Category>>("", data);
            }
        }
    }
    catch (Exception ex)
    {
        return new KeyValuePair<String, List<Om_Category>>(ex.Message, null);
    }
}

但似乎我缺少实现 NoLocks 的东西。还是它 显示超时。我错过了什么吗?

【问题讨论】:

  • msdn.microsoft.com/en-us/data/dn456843.aspx 值得一读。 MS 现在推荐 categoryContext.Database.BeginTransaction 而不是 TransactionScope。 BeginTransaction 接受隔离级别,因此您可以传入 ReadUncommitted。我不知道这是否能解决您的问题,但值得一试。

标签: c# asp.net-mvc-3 asp.net-mvc-4 c#-4.0 entity-framework-6


【解决方案1】:

令人惊讶的是,Entity Framework 内置的事务类起作用了!!

public async Task<KeyValuePair<String, List<BE_Category>>> CategoryList(BE_Category obj)
{
    try
    {
        using (var categoryContext = new ModelGeneration())
        {
            using (var dbContextTransaction = categoryContext
                      .Database
                      .BeginTransaction(System.Data.IsolationLevel.ReadUncommitted))
            {
                categoryContext.Configuration.ProxyCreationEnabled = false;

                //Code

                dbContextTransaction.Commit();

                return new KeyValuePair<String, List<BE_Category>>("", data);
            }
        }
    }
    catch (Exception ex)
    {
        return new KeyValuePair<String, List<BE_Category>>(ex.Message, null);
    }
}

Reference

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-26
    • 2014-11-22
    相关资源
    最近更新 更多