EF 4刷新数据

时间:2013-08-06 10:47:34

标签: .net c#-4.0 entity-framework-4

我有一个像这样的实体:

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

1 个答案:

答案 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()