2

我有 ADO.NET 背景,这是我第一次在一个严肃的项目中使用实体框架,所以我继续使用 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,但对如何进行编码感到困惑。

谁能简要解释一下我如何构建我的代码来完成这项工作,也许建议一种设计模式?

4

1 回答 1

0

我采用数据优先的方法

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

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

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

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

也许建议一种设计模式?

也许考虑使用存储库为您的数据映射提供一个抽象层。

于 2013-01-19T03:01:00.070 回答