2009-05-20 76 views
6

一直忙於創建一個新的應用程序,基本上我有我的數據訪問,服務層和表示層...所有的偉大作品,但我使用由EF返回的實體類。這裏的問題是我傳遞到表示層所以我需要添加實體框架引用/ dataccess到表示層 - 不好:使用存儲庫模式與實體框架一起使用的Automapper?

所以我的想法是以下,並尋找一些幫助和確認,我是沿着走行權...

  1. 中,如客戶服務層創建一組類,訂單等由於表示層到服務層中的參考..

  2. 當客戶實體在數據訪問中返回,我將返回實體類即客戶到服務我會在這裏做映射 - 不太確定我喜歡這個嗎?

  3. 如果我將它們放在服務層中並執行映射數據訪問,那麼這將創建一個循環引用作爲Dataccess> service,並且將用於映射的這些「標準類」的最佳位置,以及服務>數據訪問。 - 它應該是隻有一種方式,即服務>數據訪問

我想用Automapper(http://www.codeplex.com/AutoMapper)照顧這個,我在右邊線???任何想法或例子真的很感激..

正如我所說的唯一的事情是,當我從dataaccess返回到服務層(使用Iqueryable)我需要映射這些從實體類和使用標準集合類。

我覺得這是我感到困惑的地方,我確實認爲它不好使用實體類,因爲這意味着我需要在我的表示層中引用實體框架/ dataaccess才能訪問實體類。

回答

3

你已經擊中了EF v1的一個弱點。現在,是的,使用AutoMapper進行路線定義允許您將EF實體轉換爲「直線」商業實體,並在較高層中使用它們。另外,由於使用.NET 4.0/Visual Studio 2010,EF v4應該會在許多問題領域中帶來許多緩解 - 支持您自己的直接POCO(Plain Old CLR Objects)以及很多很多更多。看看EF Design Blog。關於EF v4,該團隊最近發佈了一些非常有趣,非常有前途的帖子。我對此很期待!

馬克

0
  1. 您可以使用EF對象在Web項目中,如果你提取其接口到你的核心/常用項目,並從倉庫或服務返回的接口類型,該Web項目使用。 可以使EF對象實現你的接口,通過創建分部類,並增加在那裏:

    部分類客戶:ICustomer

  2. 即使你可以做1.招,你應該使用反正到automapper地圖這些實體添加到您的自定義ViewModel對象中,這些對象適合您的特定視圖。您還可以使存儲庫/服務的查詢方法直接返回DTO/ViewModels - 它可以使查詢更加高效(僅查詢需要的列等),但這需要額外的EF映射。