我讀了Rick Strahl's關於DataContext生命週期管理的帖子,以及關於Stackoverflow的其他一些相關問題。如果他們回答了我的問題,我一定錯過了。Linq to SQL - 跨Back-backs保留DataContext?
我通常遵循原子方法,並在需要時爲工作單元實例化DataContext,並在之後進行處置。這很好,直到我點擊一個複雜頁面的場景,該頁面包含一個多視圖控件,並帶有幾個網格和彈出面板,這些面板都代表一個工作單元。數據存儲在內存中(實際上,我將根對象填充到會話中,以便整個分層結構在後備中可用)。很明顯,當用戶點擊「保存」時,DataContext已經過時了。
Tom Brune's comment起初引起了我的注意,因爲它看起來像這樣一種優雅的方法 - 使用反射來「溼」對象的新副本並使用新的DataContext更新數據庫。然而,關於這種方法的Rick's concerns是有效的,並且由於我的數據結構是複雜和分層的,所以我不認爲我會試試這個。
所以我剩下幾個選項,據我所知。
- 要麼使用Rick的建議,反序列化/序列化對象,並將其重新連接到一個新的上下文
- 手工代碼進行比較,並更新對象
的全新副本邏輯哪我應該關注一下,還有第三種選擇,也就是說我可以在後臺之間保留DataContext嗎?如果這是可行的,那麼將需要最少量的編碼,因爲我的根對象有大約十幾個孩子。
查看Linq對象的序列化以及關聯和循環引用的問題之後,我想我會手動編寫Save方法,然後走樹... – cdonner 2009-09-28 13:30:48