实体框架4.0和5.0代码优先使用NOLOCK提示IQueryable查询

时间:2013-02-06 20:44:21

标签: c#-4.0 visual-studio-2012 ef-code-first entity-framework-5

我正在使用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 Context的实例。

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

Visual Studio 2012,   EF 5.0 Code First,   C#.Net 4.0,   MVC Web API,   存储库设计模式

提前致谢。

1 个答案:

答案 0 :(得分:4)

不支持。 EF永远不会在查询中发出NOLOCK,除了通过Database.SqlQueryDbSet.SqlQuery执行直接SQL之外,无法执行此操作。如果您希望EF生成NOLOCK,您可以下载EF源代码并修改其SQL生成引擎以添加提示。无论如何,你应该三思而后全球使用NOLOCK