我有一个ADO.NET背景,这是我第一次在一个严肃的项目中使用Entity Framework,所以我继续使用VS2012并使用.NET 4.5和实体框架5。
我正在采用数据第一种方法并创建数据库,生成.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服务,甚至只是一个返回XML的URL链接,并给我一个可用部件列表。每辆汽车检索零件数据的方式是不同的(一些是REST,一些WCF,一些来自CSV文件等)。
所以我想定义扩展Car的类并定义一个“GetParts()”方法,该方法将具有特定的业务逻辑来获取该特定汽车的零件。
我还希望能够从数据库获取所有汽车并循环它们,为每个汽车调用GetParts方法来检索数据。
我在想我需要定义一个接口或抽象类ICar,声明GetParts方法并以某种方式合并Car POCO,但对如何编写此代码感到困惑。
任何人都可以简单解释一下如何构建我的代码来完成这项工作,或许可以建议一种设计模式吗?
答案 0 :(得分:0)
我正在采用数据第一种方法
每辆汽车检索零件数据的方式不同(有些 是REST,一些WCF,一些来自CSV文件等。)
考虑到您的数据存储类型是可变的,并且您可能想要一个可重用的模型,那么我认为首先使用EF数据库的选择对您来说并不是一个好选择。最好使用code first。
所以我想定义扩展Car的类并定义一个“GetParts()” 方法将具有特定的业务逻辑来获取部分 特别的车。
你的模型应该是持久性无知的。我不会考虑扩展或硬编码特定于数据存储的GetParts(),如果这就是你所追求的。
或许暗示一种设计模式?
或许考虑使用repository为数据映射提供抽象层。