2012-08-01 26 views
3

我有一個視圖,其中包含來自多個表的數據。實體框架中的視圖將不會更新

當我調用該視圖時,結果被加載到內存中並存儲。在對應該影響視圖的其他表進行一些更改後,視圖不知道有關更改的任何信息。

因此,當我再次調用該視圖時,例如Get()方法,EF會返回存儲數據的值。

當然我想要更新的數據。我如何強制視圖從數據庫中獲取數據而不是從內存中獲取數據?還是有更好的策略?

如果我能讓視圖知道正在進行的更改,則更好。這是否可以通過實體配置實現,也許可以使用HasRequired()方法映射FK?

編輯: 我正在使用存儲庫和工作單元模式。所以我不是每次創建和處理一個新的上下文。請考慮這一點。

+0

您是否將EF與WCF結合使用?你有什麼樣的應用程序? – 2012-08-01 12:23:35

+0

不,這是一個WPF應用程序。我調試了代碼,所以我知道從EF返回的實際數據。 – 2012-08-01 12:27:41

+0

但是你是否直接與dbcontext交談? – 2012-08-01 12:32:35

回答

6

當您對視圖使用AsNoTracking()擴展方法執行Linq查詢時。這將迫使EF始終使用數據庫中的數據,而不是記憶:

var result = from x in context.ViewSet.AsNoTracking() 
      select x; 

EF不會處理任何自動數據刷新爲您服務。

+0

是的,它只是工作。 – 2012-08-01 13:06:56