Entity framework 4 如何强制EF代码先查询数据库?

Entity framework 4 如何强制EF代码先查询数据库?,entity-framework-4,ef-code-first,Entity Framework 4,Ef Code First,我有一个管理规则集合的网站和一个单独的Windows窗体应用程序,该应用程序根据数据库中的规则进行文件级更改 这两个应用程序对EF Code First DbContext使用相同的库,但每个应用程序都在实例化它们自己的上下文副本 问题是,上下文的每个运行版本都不知道另一个版本所做的更改。例如,如果我更改了网站上的规则,则表单应用程序仍具有以前的版本 我知道我可能走错了方向,应该通过JSON/REST从站点到表单应用程序进行某种数据访问,但出于其他原因,我不希望这样做 有没有办法在上下文中“禁用

我有一个管理规则集合的网站和一个单独的Windows窗体应用程序,该应用程序根据数据库中的规则进行文件级更改

这两个应用程序对EF Code First DbContext使用相同的库,但每个应用程序都在实例化它们自己的上下文副本

问题是,上下文的每个运行版本都不知道另一个版本所做的更改。例如,如果我更改了网站上的规则,则表单应用程序仍具有以前的版本

我知道我可能走错了方向,应该通过JSON/REST从站点到表单应用程序进行某种数据访问,但出于其他原因,我不希望这样做


有没有办法在上下文中“禁用缓存”并强制每个查询命中数据库?

没有办法禁用缓存。必须手动将每个查询设置为重新加载数据。DbContext API=>不能使用该功能。您必须使用ObjectContext API

ObjectContext objectContext = ((IObjectContextAdapter)dbContext).ObjectContext;
ObjectSet<YourEntity> set = objectContext.CreateObjectSet<YourEntity>();
set.MergeOption = MergeOption.OverwriteChanges;
var query = from x in set where ... select x;    
这将关闭实体的内部更改跟踪,还应强制EF每次重新加载实体,但这将使保存更改更加困难。

我喜欢更简单的场景:)我目前通过构造函数通过DI创建了存储库。我想我必须取消它,并根据需要使用服务定位器来生成新的上下文?假设“YourEntity”有相关的“Users”实体,它们不会用MegeOptions.OverwriteChanges刷新,有没有关于如何刷新YourEntity的建议。还有用户?
var query = from x context.YourEntities.AsNoTracking() where ... select x;