实体框架中的NoLock

时间:2015-09-30 05:25:38

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

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

我使用的是以下代码

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的东西。还是它   显示超时。我错过了什么吗?

1 个答案:

答案 0 :(得分:2)

令人惊讶的实体框架内置交易类工作!!

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