我使用的是 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() 之上调用的数据库上下文的实例。
现在我们想用(NOLOCK)运行上面的查询。
视觉工作室 2012,
EF 5.0 代码优先,
C#.Net 4.0,
MVC Web API,
存储库设计模式
提前致谢。
最佳答案
不支持。 EF 永远不会在查询中发出 NOLOCK
并且除了通过 Database.SqlQuery
或 DbSet.SqlQuery
执行直接 SQL 之外没有办法做到这一点。如果你想让 EF 生成 NOLOCK
你可以下载 EF 源代码并修改它的 SQL 生成引擎以添加提示。无论如何,您应该三思而后行在全局范围内使用 NOLOCK
。
关于c#-4.0 - Entity Framework 4.0 和 5.0 Code First 使用 NOLOCK 提示 IQueryable 查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14738421/