在实体框架5 POCO之上构建业务逻辑

时间:2013-01-18 19:11:01

标签: entity-framework design-patterns poco .net-4.5 object-oriented-analysis

我有一个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,但对如何编写此代码感到困惑。

任何人都可以简单解释一下如何构建我的代码来完成这项工作,或许可以建议一种设计模式吗?

1 个答案:

答案 0 :(得分:0)

  

我正在采用数据第一种方法

     

每辆汽车检索零件数据的方式不同(有些   是REST,一些WCF,一些来自CSV文件等。)

考虑到您的数据存储类型是可变的,并且您可能想要一个可重用的模型,那么我认为首先使用EF数据库的选择对您来说并不是一个好选择。最好使用code first

  

所以我想定义扩展Car的类并定义一个“GetParts()”   方法将具有特定的业务逻辑来获取部分   特别的车。

你的模型应该是持久性无知的。我不会考虑扩展或硬编码特定于数据存储的GetParts(),如果这就是你所追求的。

  

或许暗示一种设计模式?

或许考虑使用repository为数据映射提供抽象层。