我有一个像这样的实体:
public class Customer
{
public string Id { get; set; }
public string Name { get; set; }
}
我正在使用LinQ阅读如下:
public IQueryable<Customer> GetCustomer()
{
var result = from cust in _dbContext.Customers.AsNoTracking() select cust;
return result;
}
第一次一切正常但是当我手动在DB中添加客户时,同一客户没有反映在此查询中,它总是返回旧记录。
那么我如何始终从DB获得更新的客户?
注意:我使用的是EF 4
答案 0 :(得分:0)
问题是方法调用.AsNoTracking()
AsNotracking()方法是一个分离的数据列表,在5.1项目的链接http://msdn.microsoft.com/en-us/data/hh949853.aspx上验证解释了这个:
如果您处于只读方案中并希望避免开销 将对象加载到ObjectStateManager中,可以发出“No 跟踪“查询。可以在查询中禁用更改跟踪 水平。
请注意,通过禁用更改跟踪,您实际上是有效的 关闭对象缓存。当您查询实体时,我们不能 通过拉动先前实现的查询来跳过实现 ObjectStateManager的结果。如果你反复查询 对于相同上下文中的相同实体,您实际上可能会看到一个 性能受益于启用变更跟踪。
使用ObjectContext,ObjectQuery和ObjectSet实例进行查询时 将在设置后记住MergeOption,并查询 在它们上面编写的将继承父级的有效MergeOption 查询。使用DbContext时,可以通过调用来禁用跟踪 DbSet上的AsNoTracking()修饰符。
删除链接查询的.AsNoTracking()