我正在使用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, 存储库设计模式
提前致谢。
答案 0 :(得分:4)
不支持。 EF永远不会在查询中发出NOLOCK
,除了通过Database.SqlQuery
或DbSet.SqlQuery
执行直接SQL之外,无法执行此操作。如果您希望EF生成NOLOCK
,您可以下载EF源代码并修改其SQL生成引擎以添加提示。无论如何,你应该三思而后全球使用NOLOCK
。