2013-04-03 12 views
1

我需要檢索實體的大圖,在UI中對其進行操作(添加,更新,刪除),然後將其全部存回數據庫。經過各種SO問題和實驗後,我發現這種質量「分離圖更新」方法非常成問題,所以我現在正在重新思考我的方法。雙層WPF應用程序中的POCO實體

它只是一個2層WPF應用程序,所以我現在正考慮在用於操作實體圖形的UI期間存在長時間運行的上下文 - 這樣它就可以自動跟蹤更改。不過,我不確定如何在體系結構上處理這個問題。

該應用程序目前有三個項目 - 用戶界面,業務層和一個用於生成實體的edmx。我的業務層有一個CustomerManager類,它公開一個方法來檢索客戶圖(訂單,訂單行等)以及持久化客戶圖的方法。假設UI持有CustomerManager類的同一個實例,並因此具有相同的上下文,則會跟蹤對圖的更改(添加和更改實體)。

刪除的實體是比較麻煩一些,因爲上下文必須使用要做到這一點,i.e.:-

context.Set<Order>().Remove(orderToDelete); 

尋找一些建築的建議真的。我只是在我的CustomerManager類中暴露了DeleteOrder方法嗎?鑑於我有十幾種其他實體類型,我想可能需要公開類似的方法來刪除訂單,產品等。

這是一種明智的方法,讓用戶界面保持同一個CustomerManager實例,或者在那裏一個更好的方法來管理長期運行的上下文? DeleteOrder方法的合理位置應該在我的Customer實體(部分)類中,但由於這些類與業務層(這是上下文所在的位置)分開的項目中,我想我不能這樣做(除非我將上下文傳遞給DeleteOrder方法)?

+0

對於完全斷開的情況,您需要二級緩存。 EF沒有開箱即用。 (NHibernate的)。本文可以幫助:http://msdn.microsoft.com/en-us/magazine/hh394143.aspx –

回答

1

只有當你的上下文存在於用戶界面和用戶界面直接與數據庫直接對話以獲取和保存數據時,你的長期生活環境纔會有用。在您的用戶界面和上下文之間涉及WCF總是會導致序列化,並導致實體分離=不跟蹤更改(除非您使用STE)。在WCF服務中存在長時間的生活環境太成問題,並且通常是不好的做法。

您是否考慮過WCF數據服務?它們通過使用特殊的客戶端上下文來提供客戶端跟蹤。

+0

許多道歉,我的意思是說這是一個「雙層WPF」(而不是WCF)應用程序。有一個糟糕的一天 - 我已經更新了這個問題。 –

+0

好的。如果使用分離的實體圖的WPF應用程序沒有意義。使用具有由某個UI區域限制的生命週期的上下文,並使用附加的實體。分離的實體圖表適用於Web應用程序和Web服務等場景。 –

+0

是否可以直接從視圖模型訪問上下文,或者您是否可以在BLL類中使用它(即使它只是一個「邏輯」層),這與我所描述的相似? –