这是与实体框架交互的正确方法吗?

Posted

技术标签:

【中文标题】这是与实体框架交互的正确方法吗?【英文标题】:is this the correct way to interact with Entity Framework? 【发布时间】:2011-06-17 18:32:11 【问题描述】:

我正在开发实体框架以开始使用它。以下是我安排我的项目与 EF 交互的方式。我只想知道我是否朝着正确的方向前进。请建议更好的方法。请忽略 UI 等架构不应参考 DAL。这只是“了解”项目。 :)

这就是我正在做的:

DAL 的一个项目。这里所有的数据库操作都将使用 EF 进行。

模型 - 业务实体类。我将返回模型的实体类,而不是返回 EF 的 Order 对象。 (有没有办法将我的业务实体映射到 EF 实体?)

UI - 这将调用 DAL 并完成工作。

项目 1 - DAL

这个项目还包含我的 edmx 文件。

public class DALRepository


    OrderEntities orderEntitiesContext = new OrderEntities();

    public IQueryable<Model.OrderModel> GetOrders ()
    
        return orderEntitiesContext.Orders.Select(o => new Model.OrderModel  OrderName = o.OrderName, Id = o.OrderID );
    

项目 2 - 模型

public class OrderModel

    public long Id  get; set; 
    public string OrderName  get; set; 

项目 3 - 用户界面

public partial class OrderList : System.Web.UI.Page

    protected void Page_Load(object sender, EventArgs e)
    
        DAL.DALRepository dal = new DAL.DALRepository();
        GridView1.DataSource = dal.GetOrders();
        GridView1.DataBind();
    

【问题讨论】:

【参考方案1】:

考虑添加一个带有 DAL 外部所需 API 的接口项目,以便在没有 DAL 的情况下启用单元测试,以及一个使用 DAL 项目实现这些接口的实现项目。

【讨论】:

正确。就像据说这只是“了解 EF”项目。如果我想对它进行单元测试并且不暴露接口,我知道它会带来多大的痛苦。 :) 一个小问题。这就是他们所说的带有 POCO 对象的实体框架吗? 可以,这取决于您如何生成实体。 (如果它们继承自 EF 基类。) 没有。我的模型类不继承自 EF 类。它们只是简单的模型。【参考方案2】:

我认为这非常好,你走在正确的道路上。

我还建议在 VS 解决方案中使用架构项目来限制其他开发人员交叉调用不正确的项目并保持正确的 SoC。

【讨论】:

【参考方案3】:

在我看来,您走在正确的道路上。 创建投影有时很麻烦,你迟早会忘记一个属性。

这是一个将属性从源对象复制到目标对象的框架: http://automapper.codeplex.com/

【讨论】:

【参考方案4】:

一个小问题。这就是他们所说的带有 POCO 对象的实体框架吗?

根据您的显示,这将被称为CodeFirst

【讨论】:

我猜 CodeFirst 更好。让我更好地控制我在做什么。

以上是关于这是与实体框架交互的正确方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用实体框架回滚迁移的正确方法

实体框架 - 在使用它们之前检查单个记录的正确方法

使用关联实体的正确方法是啥?

测试实体框架查找方法

这是将域中的模型与每个帐户的多个用户相关联的正确方法吗?

将 WCF 服务中使用的实体框架连接字符串包含到自托管控制台应用程序中的正确方法是啥?