2009-10-15 53 views
0

我沒有找到類似的東西認識的變化,所以我必須要問:LINQ不會在數據庫

我使用LINQ to SQL和所有被罰款,直到我開始使用存儲過程來更新數據庫條目。 (我的存儲過程就像更新groupid x的所有條目) 更新運行良好,數據庫中的值發生更改。但是DataContext忽略了這種改變。

我不得不說,數據上下文是一個單身人士,我知道是不常見的方式,但我有不同的理由,爲什麼我必須這樣做。

所以

db.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues); 

沒有幫助。

他爲什麼不知道db的變化?

回答

2

你想要做的事情非常反對LinqToSql的工作方式。

使用長期存在的DataContext很難正確執行,特別是如果您需要調用存儲過程,LinqToSql無法輕鬆跟蹤數據更改。

通過DataContext所做的更改通常會自動進行跟蹤,因此DataContext可以正確管理其緩存並跟蹤從該DataContext對數據庫所做的更改。但情況並非總是如此。 DataContext沒有(也不能很容易)理解你的存儲過程正在做什麼,所以它不知道如何保持它的緩存正確。此時,在調用存儲過程之後,最好的選擇是擺脫DataContext並創建一個新的。這有效地吹走了你的緩存,這可能是也可能不是重大的性能下降,但數據完整性應該是你的主要關注點。如果你的Singleton DataContext不是唯一修改數據庫的東西(例如,你的數據庫可以通過觸發器,批處理,其他應用程序等進行修改),你的DataContext也可能包含不準確的數據它的緩存,這是另一個有短命的DataContext的原因。

所以,雖然你可能成功使用一個長壽命的Singleton DataContext,但你會以整個方式與系統作戰,並且系統可能最終贏得勝利。

您必須決定:數據完整性有多重要?

+0

awsome回答!謝謝 – Markus 2009-10-15 13:26:19

2

因爲datacontext正在緩存這些值。這裏有一篇關於如何clear the cache的文章。但是,現在您遇到了實施知道何時清除通知系統的問題。

Microsoft建議數據上下文應僅用於單個工作單元。掛在它上面作爲一個singleton 可能 不是一個好主意。