2009-05-21 55 views
2

我有一個路障,它已經級聯到下面描述的情況。對於回答我以前的問題的人來說,我沒有太多幫助(我想我必須學會更好地設計它們),但是我希望有人能夠至少向我解釋這一點(我是LINQ的新手,並且沒有機會尚未讀入任何偉大的長度)。LINQ DeferredLoadingEnabled和DataLoadOptions關係

我正在使用存儲庫模型通過LINQ-to-SQL訪問數據。我試圖使用1個數據上下文聲明爲公共靜態,這樣我總是使用相同的上下文。

問題1:網頁在保存更改後立即加載緩存值。更改傳播到數據庫,但datacontext正在吐出對象的緩存副本。

解決方法:在datacontext上設置ObjectTrackingEnabled = false

問題2:現在,對象不能延遲加載 - 當我在調試過程中檢查它們時,給定對象內的所有實體都爲空。

解決方法:在datacontext上設置DeferredLoadingEnabled = false

問題3: LINQ不會爲與給定對象關聯的所有實體自動設置即時加載。

解決方法:明確配置爲在DataContext LoadOptions並通過設定LoadWith<Object>(o => o.entity1)LoadWith<Object>(o => o.entity2),...,LoadWith<Object>(o => o.entityN)手動確定每個相關實體。

有些人可以幫我緩解緩存問題,而不必處理剩下的問題嗎?

如果沒有,可有人告訴我,如果有另一種方式來對數據上下文設置ImmediateLoadingEnabled(或類似的東西),這樣我就不必明確規定爲相關聯的所有實體加載選項我域中的所有對象?

我真的很感激一些反饋。如果我在沒有足夠信息的情況下提問或想要示例,請告訴我!

預先感謝您!

回答

1

對於Web應用程序,您不能使用單個上下文,因爲Web應用程序是多線程的(例如每個請求有1個線程),這意味着多個線程正在使用相同的上下文。 I.o.w .:你應該使用一個系統,在其中爲每個數據請求創建一個新的上下文,並用它來執行查詢,然後處理上下文。

+0

嗨, 因此,考慮到Web應用程序的多線程性質,我現在已經解決了一些其他的問題。但是,我仍然發現問題1仍然存在 - 就技術而言,同樣的請求仍在服務中,我認爲這不是解決最初問題的可行方案。 ASP.NET MVC ...如果這有所作爲。 – feemurk 2009-05-22 05:45:46