2014-10-06 53 views
0

我有一个并发错误处理程序,它执行从客户端到数据库的当前显式字段更新,然后从数据库重新加载记录以刷新对客户端的所有其他更改。EF6无法通过dbContext刷新导航或集合属性

这适用于我刷新我的主体实体 - 公司,但我不能影响相关集合属性的更新。

我正在使用更改跟踪,所以上下文总是从这些副本中提取。

有没有办法导致集合属性从数据库刷新?所有我能找到的Load方法和排列都不会更新已经加载的副本。

以下示例缩小到1个集合属性。 这里,当refreshFromStore为true时,公司实体将从当前数据库值中刷新。注释掉的PhoneNumbers属性Load无用,并且不会从当前数据库值更新。

这怎么办?

感谢

public Company GetCompany(int CompanyId, bool refreshFromStore) 
    { 
     Company company = context.Companies 
       .Include("PhoneNumbers") 
       .Where(c => c.Id == CompanyId).FirstOrDefault(); 
     if (refreshFromStore) 
     { 
      context.Entry(company).Reload(); 
      //context.Entry(company).Collection<PhoneNumber>("PhoneNumbers").Load(); No good - doesn't write to tracked instances 
     } 

     return company; 
    } 

回答

0
+0

我这样做已经,穆赫辛。 – Gerry 2014-10-06 08:14:15

+0

这两个扩展的核心线:context.Entry(entity).Reload();这会重新加载主要实体。 context.Entry(entity).Collection (navigationProperty).Query();这对现有数据没有影响 - 即不从数据库 – Gerry 2014-10-06 08:15:40

+0

尝试AsNoTracking()方法刷新它。 – 2014-10-06 08:31:57

相关问题