2

我有一個ADO.NET背景,它是我第一次在一個嚴肅的項目中使用實體框架,所以我走了前來,得到了VS2012並正在使用它。 NET 4.5和實體框架5.在實體框架之上構建業務邏輯5 POCOs

我取數據第一種方式,並創建了數據庫,生成的.edmx也使用這種方法從上下文中分隔出來的POCOS:http://allen-conway-dotnet.blogspot.co.uk/2013/01/separating-entity-framework-poco.html

所以我的解決辦法看起來像這樣:

Data.Access (where I access the EF context and return POCOS to Business Layer) 
Data.Model (where the POCOs are) 
Data.Repository (where the context sites) 
Presentation.Admin.Website 

現在說我有在數據庫中的表/ POCO類(只是舉個例子 - 不是真正的)

 namespace Data.Model 
      { 
       using System; 
       using System.Collections.Generic; 

       public partial class Car 
       { 
        public Car() 
        { 
         this.Parts= new HashSet<Parts>(); 
        } 

        public int ID { get; set; } 
        public string Manufacturer { get; set; } 
        public string Model{ get; set; } 
        public Nullable<bool> Enabled { get; set; } 

        public virtual ICollection<Parts> Parts{ get; set; } 
       } 
      } 

現在假設數據庫中的所有的車都有一個Web服務,甚至只是一個鏈接到一個URL,其返回XML並給我一個可用部分的列表。每輛車檢索零件數據的方式是不同的(一些是REST,一些WCF,一些來自CSV文件等)。

所以我想定義擴展Car的類並定義一個「GetParts()」方法,該方法將具有特定的業務邏輯來獲取該特定汽車的零件。

我也希望能夠從數據庫中獲取所有汽車並循環它們,爲每個汽車調用GetParts方法來檢索數據。

我想我需要定義一個接口或抽象類ICar聲明GetParts方法,並以某種方式合併汽車POCO,但越來越困惑如何去編碼這個。

任何人都可以簡單地解釋一下,我可以如何構造我的代碼來完成這個任務,也許會提出一個設計模式?

回答

0

我取數據第一種方法

在每節車廂檢索部分數據的方式是不同的(一些 是REST,一些WCF,一些從CSV文件等)。

考慮到你的數據存儲的類型是可變的,你可能想要一個可重用的模型,那麼我認爲首先使用EF數據庫的選擇對你來說不是一個好選擇。最好去code first

所以我想定義擴展汽車類和定義「GETPARTS()」 方法,這將有具體的業務邏輯來獲取該 特定的汽車零部件。

你的模型應該是持久性的無知。我不會考慮擴展或硬編碼數據存儲特定的GetParts(),如果這就是你所追求的。

也許提示設計模式?

也許看看使用repository來提供一個抽象的數據映射層。

+0

第一種方法讓我在我的模型中使用抽象類,並仍然生成數據庫表的映射 –