2010-01-08 82 views
4

現在Linq中的buzword是「工作單元」。 如「只保留一個工作單元的數據上下文」然後將其銷燬。Linq Datacontext和「工作單元」

那麼我有幾個關於這個問題。

  1. 我正在創建胖客戶端WPF 應用程序。所以我的數據上下文需要在當前屏幕上跟蹤用戶可用的整個實例化對象的網頁。我什麼時候可以銷燬我的datacontext?
  2. 隨着時間的推移,我基於用戶的動作以及它們與第一個數據上下文的對象的交互來構建linq查詢。我如何創建一個新的DataContext並在新的上下文上執行查詢?

我希望我很清楚。 謝謝工作

回答

0

我正在創建一個胖客戶端WPF應用程序。

好的。

所以我的數據上下文需要跟蹤當前屏幕上用戶可用的實例化對象的整個Web。

不。那些類是數據庫映射類。他們不是UI演示課程。


如何創建一個新的DataContext並執行新的上下文查詢?

Func<DataContext, IQueryable<Customer>> queryWithoutADataContext = 
    dc => 
    from cust in dc.Customers 
    where cust.name == "Bob" 
    select cust; 

Func<DataContext, IQueryable<Customer>> moreFiltered = 
    dc => 
    from cust in queryWithoutADataContext(dc) 
    where cust.IsTall 
    select cust; 

var bobs = queryWithoutADataContext(new DataContext); 
var tallbobs = moreFiltered(new DataContext); 
+0

感謝您對第2部分 這是非常有益的 – Rabbi 2010-01-10 13:28:07

+0

你不通過封裝他們作爲代表運行DC實例早處置的風險?在延遲執行的情況下,直流實例需要存在嗎? – 2010-06-20 08:08:05

1

單位是不一樣的只是保持你的datacontext存在了工作的一個單元。

工作單元是一種描述如何以抽象方式表示事務的設計模式。這只是創建,更新和刪除(CUD)操作所必需的。

一種理念是UoW用於所有CUD操作,而只讀存儲庫用於讀取操作。

在任何情況下,我會建議從UoW或Repository的使用中解耦對象生存期。使用依賴注入(DI)將兩者都注入到消費服務中,並讓DI容器管理兩者的生命週期。

在Web應用程序中,我的經驗是對於單個請求(每個請求生存期),對象上下文只應保持活動狀態。另一方面,對於一個像你所描述的那樣的富客戶來說,長時間保持它活着可能會更有效率(單身生命)。

通過讓DI容器管理對象上下文的生命週期,您不會將自己綁定到一個特定的選擇。