3

我使用的是 EF 5.0 Code First。我们无法在每个读取查询上实现 nolock。请找到下面的代码。

我的模型:

public class UserType
{
    public UserType()
    {
        CreationDate = DateTime.Now;
        UpdatedDate = DateTime.Now;
        DeletedFlag = false;
    }
    public int UserTypeId { get; set; }
    public string UserTypeName { get; set; }

    public int CreatedBy { get; set; }
    public int UpdatedBy { get; set; }
    public DateTime CreationDate { get; set; }
    public DateTime UpdatedDate { get; set; }
    public bool DeletedFlag { get; set; }
}

RepositoryBase:(我们使用的是存储库设计模式)

 public IQueryable<T> Query<T>() where T : class
    {
            return DataContext.Set<T>();
    }

服务:

//TODO: place NOLOCK
repBase.Query<UserType>().Where(ja => ja.DeletedFlag == false).OrderByDescending(ja => ja.UpdatedDate).ToList();

repBase 是要在 Query() 之上调用的 DB 上下文的实例。

现在我们想用(NOLOCK)运行上面的查询。

Visual Studio 2012、EF 5.0 代码优先、C#.Net 4.0、MVC Web API、存储库设计模式

提前致谢。

4

1 回答 1

4

不支持。EF 永远不会在查询中发出,除了通过orNOLOCK执行直接 SQL 之外,没有其他方法可以做到这一点。如果你想通过 EF 生成,你可以下载 EF 源代码并修改其 SQL 生成引擎以添加提示。无论如何,您应该三思而后行地使用全局。Database.SqlQueryDbSet.SqlQueryNOLOCKNOLOCK

于 2013-02-07T09:14:10.940 回答