不,沒有辦法禁用緩存。您必須手動將每個查詢設置爲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也什麼建議嗎? –