2012-05-28 66 views
0

在我的DBMS上,我有兩個具有一對多關係的表(A <-B)。 在第一次運行時,我檢索像這樣的(含乙級)的一些記錄:如何忽略遞歸緩存數據以完全獲取數據庫存儲?

var lst = from a in ctx.As.Include("Bs") select a; 

所以,一切正常。 但幾分鐘後,我想再次獲取它們,因爲它們可以在其他應用程序中更改。

我試圖用

ctx.Refresh(RefreshMode.StoreWins, lst); 

當我做到這一點,唯一的東西被刷新爲B對象,而不是A. 所以,我必須做這樣一個步驟:

foreach (var a in lst) { 
    ctx.Refresh(RefreshMode.StoreWins, a.Bs); 
} 

如果我沒有在linq聲明中包含Bs,那麼也可以,然後使用Load方法代替Refresh

這裏的問題是呼叫RefreshLoad太多次可能會降低性能。如何在沒有太多調用的情況下從數據庫存儲中重新加載它們?

謝謝!

回答

1

但幾分鐘後...

語境是工作的工作單位的單位通常用不了幾分鐘,以便爲您的問題的基本答案是創造新的上下文並執行再次查詢。

如果你真的認爲你的上下文必須活了這麼久(我懷疑它必須,因爲在這種情況下,你不希望覆蓋本地更改),你可以試試這個:

ctx.As.MergeOption = MergeOption.OverwriteChanges; 
ctx.Bs.MergeOption = MergeOption.OverwriteChanges; 
var lst = from a in ctx.As.Include("Bs") select a; 
+0

謝謝!有用!另外,我想保留上下文,以便可以將實例的某些更改保存到數據庫中。因爲如果我使用另一個上下文,它會拋出一個異常。對不起,我的愚蠢,我是一個新的實體框架! –