2013-09-28 83 views
2

我已經看到了很多這些類型的問題就在這裏,但他們要麼是無人接聽,不太一樣,我的問題問或我需要的細節。如何從實體框架層分離POCO層,仍然能夠將業務邏輯添加到對象

我已經包括了我下面的項目的東西的高級別參考視圖的屏幕截圖。

  1. 在我的「Sample」解決方案中,我目前有一個名爲Sample.Data.Model的項目,其中包含我的數據庫優先模型的edmx文件。
  2. Following the steps in this MSDN walkthrough,然後我將自動生成的POCO類移動到一個單獨的項目中,並將其稱爲Sample.Data.Entities
  3. 我再引用的Sample.Data.Entities項目在我Sample.Data.Model項目,所以我的項目成功生成固定所有usings。
  4. 我當然會需要添加到POCO類,所以我說在Sample.Data.Entities項目PartialClasses文件夾,我的部分類。

然後這是我迷路。在較小的(非n層項目)我的EDMX文件和局部類在同一個項目中,所以我可以只添加我的類對象相關的在我的部分類文件的方法是這樣的:

namespace Sample.Data.Entities 
{ 
    public partial class User 
    { 
     public string FullName 
     { 
      get 
      { 
       return string.Format("{0} {1}", this.FirstName, this.LastName); 
      } 
     } 
    } 

    public User GetUser(int userID) 
    { 
     using (var dc = new ProntoEntities()) 
     { 
      return (from u in dc.Users where u.ID == userID select u).SingleOrDefault(); 
     } 
    } 
} 

然後在MVC項目我可以做這樣的事情......

User user = new User(); 
user = user.GetUser(1); 

OR

User user = new User(); 
user.FirstName = "John"; 
user.LastName = "Smith"; 
user.Update(); 

但是,我不能這樣做,在當前的設置,因爲部分類一無所知的實體。

所以,我的問題是,在我目前的設置中,我把「查詢」的數據?另外,如果我要爲我的MVC項目製作「ViewModels」,那麼應該去哪裏?我通常會把它們放在與我的部分類和edmx文件相同的項目中。

Click to view larger version of image below

enter image description here

+1

你的主要問題是,你試圖實現圍繞_persistence ignorance_圍繞架構_active紀錄_。實體不應該有CRUD職責。這是針對上下文和DbSet的。然後,您可以擁有一個知道DAL(上下文+實體)的服務層,並且可能知道包含視圖模型(或包含視圖模型)的庫。控制器層僅與服務層進行通信。 –

回答

1

所以,我的問題是,凡在我的當前設置我把 「查詢」 的數據?

我認爲你應該使用神奇Repository模式。
例如:http://www.remondo.net/repository-pattern-example-csharp/

另外,如果我要做出我的MVC項目「的ViewModels」,應該在哪裏那些去了?

由於viewmodel包含的數據與他們的視圖相關,我相信你不需要將它們與實體或它們的部分類放在一起。如果我是你,我只是把你的MVC項目中的模型文件夾。

+0

感謝您的回覆!我會研究倉庫模式,但我希望有更多的切割和乾燥的東西。此外,我並不瘋狂把我的ViewModels放入MVC項目中,因爲我喜歡像ViewModel這樣返回業務層的數據查詢:http://screencast.com/t/n31t9rjU8HBR – RichC

+0

有關更多詳細信息,請查看這項之一:https://github.com/Binjaaa/ServiceRegistry/blob/master/SRR.DataAccessLayer/Repositories/SRREntityTypeRepository.cs 可以標記基礎資源庫虛擬的方法,因此,你可以修改他們每個人在當前的存儲庫中。例如UserRepository。 – Binjaaa

+1

對於視圖模型:http://sampathloku.blogspot.hu/2012/10/how-to-use-viewmodel-with-aspnet-mvc.html – Binjaaa

1

您可能有興趣使用開放源代碼N-Tier Entity Framework,它在服務器端使用實體框架並生成用於構建基於WCF的n層體系結構的整個基礎架構,其中包括客戶端上類似EF的API。查看框架的用戶指南以及可在Codeplex上下載的示例應用程序。由此產生的解決方案具有高度的可定製性,同時提供關於何處放置的指導。

+0

偉大的資源建議 - 我會看看。 – RichC