2011-04-14 43 views
11

對於關於EF4上下文壽命的另一個問題感到抱歉,但我一直想知道這一段時間,我似乎找不到答案。我不是很熟悉很多模式或者過於複雜的東西(以我的觀點來看),所以我想保持簡單。實體框架4 - 在Winform應用程序中的上下文的壽命/範圍

我使用ASP.NET應用程序,其中上下文由每個http請求管理,這在我看來是非常好的方法。

但是我現在正在使用一個winforms應用程序,並且我有時會有事務或報告,如果我只是爲每個查詢創建上下文,那麼這些事務或報告的執行效果不會很好。這並不是說這個性能問題是一個非常有問題的東西,我只是想聽聽是否有一個簡單的策略,就像ASP.NET中針對winforms的HTTP請求一樣?

回答

14

不要爲每個查詢創建上下文。同時,不要創建一個用於表單(或您的應用程序)整個生命週期的上下文。

爲單個工作單元(可能包含許多查詢)創建一個上下文。

通過這種方式,您可以將所有更改封裝在上下文中,並讓Entity Framework將數據庫調用包裝在一個非常小的事務中,而無需擔心。

我更喜歡從實體上下文中抽象出Repository和Unit of Work模式,以便我可以獨立使用它們(這使得一切都非常清晰)。 MSDN實際上已經在細節上一個體面的文章:

MSDN - Using Repository and Unit of Work patterns with Entity Framework 4

+0

&@dotnedify - 感謝這個,我看這樣做同樣的事情對我們的可憐數據集驅動形式。爲所有人贊助。 – Tom 2011-04-14 13:24:37

+0

我明白了。我的問題是我正在用靜態方法創建靜態類來處理插入/更新/獲取等方法,結果是必須爲每個函數傳遞上下文,而不是創建Manager類的實例並將其傳遞到類級別。謝謝它真的打開了我的眼睛! – 2011-04-14 14:37:13

+0

@湯姆 - 很高興我間接幫助過一次! – 2011-04-14 14:38:45