不,没有办法禁用缓存。您必须手动将每个查询设置为reaload数据。该功能不适用于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;
或者更简单的方案:如果可能的话,而不是在同样的背景下我们新的一个正在运行的查询使用更好的上下文管理。
Btw。在winform应用程序中暴露服务并通过网站使用服务的想法是错误的。您需要第三个服务应用程序(托管在Web服务器上或作为Windows服务),并且网站和winform应用程序都将通过该新应用程序访问数据库。 EF将只在新的应用程序中。
编辑:
如果您的WinForm应用程序不会更改从数据库加载数据你也可以使用这样的:
var query = from x context.YourEntities.AsNoTracking() where ... select x;
这将关闭实体的内部变化跟踪,它也应该强制EF每次都会重新加载实体,但这会使存储更改变得更加困难。
我喜欢简单的场景:)我现在有通过DI通过构造函数创建的存储库。我想我将不得不核实它并使用服务定位器根据需要生成新的上下文? – mattdwen
比方说,“YourEntity”有相关的“用户”的实体,它们不与MegeOption.OverwriteChanges刷新,如何刷新YourEntity.Users也什么建议吗? –