2011-07-10 79 views
3

我試圖在設置中使用EF4.1,其中我將有一個DAL(數據訪問層),BLL(業務邏輯層),然後是表示層(通常是ASP.NET Web應用程序或控制檯應用程序也許)。多層應用程序中的實體框架

目前我做所有使用LINQ to SQL的項目,並具有使用上面描述的多層的設置。

在看EF時,雖然所有的例子都只使用1層或2層,但很難找到使用DAL和BLL的完整示例。

離我最近的想要的是使用POCO代碼生成器來創建POCO類,然後將這些類重新定位到我的BLL項目中 - 並且.edmx和對象上下文保留在DAL。

這個問題雖然是DAL需要一個BLL的引用,以便它知道POCO類 - 理想情況下引用將是另一種方式。如果DAL引用了BLL,那麼我也無法從BLL引用DAL - 因爲你不能有循環引用,所以我不能對對象上下文做任何事情,比如調用bll中的save changes方法。

無論如何,我已經陷入了一團糟。

我正在考慮以不同的方式(類似於我現在使用LINQ to SQL進行的操作)將EF實體對象留在DAL中,並且我編寫自己的BLL類,這些類只是「捎帶」到他們的DAL對象計數器部件。這樣DAL可以參考BLL和BLL。

對不起,它很長的問題,但欣賞人們的想法,我真的花了幾個小時閱讀EF,但很難看到它如何在多層次的方法工作。

回答

1

好吧,幾個月前我問過自己同樣的問題。

我發現了Microsoft關於分層的白皮書,我能記得的是他們認爲EF在某些情況下是BLL + DAL組件。

,並在我的情況,這是我到目前爲止一直在做:

  • 我只能創建兩個層:展示(ASP.Net)+業務層(含EF類,EDMX和DB上下文)
  • 我管理的表示層中的DB上下文(具有通過會議或多個控制HTTPRequests的在我的EF-對象生命週期)

其實,我合併BLL + DAL。但我不得不承認我沒有參與具有非常複雜業務流程的項目。 我知道這從嚴格的建築觀點來看並不完美,但對於我必須處理的那種項目來說,它非常適用。

在第一時間我一直在創造了3層,但如果你必須不斷創造「啞巴」類映射DAL和Presentation它涉及到一個噩夢..

取決於數據和商業模式複雜性我猜..

+0

我們正在採取相同的方法。使用EF時,我在單獨的DAL中看不到任何值。 –

相關問題