【问题标题】:Automapper for use with Entity Framework using repository pattern?使用存储库模式与实体框架一起使用的自动映射器?
【发布时间】:2009-05-20 13:04:28
【问题描述】:

一直忙于创建一个新应用程序,基本上我有我的数据访问、服务层和表示层......一切都很好,但我使用的是 EF 返回的实体类。这里的问题是我将这些传递到表示层,所以我需要将实体框架引用 /dataccess 添加到表示层 - 不好:

所以我的想法如下,并且正在寻求一些帮助和确认我正在走正确的路线......

  1. 在服务层中创建一组类,如客户、订单等,因为表示层引用了服务层..

  2. 当在数据访问中返回客户实体时,我会将实体类(即客户)返回给服务,我会在此处进行映射 - 不太确定我是否喜欢这个?

  3. 哪里是我用于映射的这些“标准类”的最佳位置,如果我将它们放在服务层并映射数据访问,那么这将创建一个循环引用作为数据访问>服务和服务>数据访问..-它应该只是一种方式,即服务>数据访问

我正在考虑使用 Automapper (http://www.codeplex.com/AutoMapper) 来解决这个问题,我是在正确的路线上吗???任何想法或例子都非常感谢..

正如我所说,唯一的事情是,当我从数据访问返回到服务层(使用 Iqueryable)时,我需要将它们从实体类中映射出来并使用标准集合类..

我认为这是我感到困惑的地方,我确实觉得使用实体类不好,因为这意味着我需要在表示层中引用实体框架/数据访问才能访问实体类。 .

【问题讨论】:

    标签: c# entity-framework repository-pattern


    【解决方案1】:

    您遇到了 EF v1 的弱点之一。就目前而言,是的,使用 AutoMapper 的路线当然可以让您将 EF 实体转换为“直接”业务实体并在更高层中使用它们。

    此外,.NET 4.0 / Visual Studio 2010 的 EF v4 应该会在许多问题领域带来很多缓解 - 支持您自己的直接 POCO(普通旧 CLR 对象)以及更多.查看EF Design Blog。该团队最近发布了许多关于 EF v4 的非常有趣、非常有前途的帖子。我很期待!

    马克

    【讨论】:

      【解决方案2】:
      1. 如果您将 EF 对象的接口提取到您的核心/公共项目中并从存储库或服务返回 Web 项目使用的接口类型,则您可以在 Web 项目中使用 EF 对象。 您可以通过创建部分类并在此处添加来使 EF 对象实现您的接口:

        部分类客户:ICustomer

      2. 即使您可以做到 1. 技巧,您可能还是应该使用 automapper 将这些实体映射到适合您特定视图的自定义 ViewModel 对象。您还可以使存储库/服务的查询方法直接返回 DTO/ViewModels - 它有时可以使查询更高效(仅查询需要的列等),但这需要额外的 EF 映射。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多