繁体   English   中英

使用存储库模式与Entity Framework一起使用的自动映像?

[英]Automapper for use with Entity Framework using repository pattern?

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

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

  1. 在服务层中创建一组类,如客户,订单等,因为表示层具有对服务层的引用。

  2. 当在dataccess中返回一个客户实体时,我会将实体类即Customer返回给服务,我会在这里进行映射 - 不太确定我喜欢这个吗?

  3. 哪里是我用于映射的这些“标准类”的最佳位置,如果我将它们放在服务层并对dataaccess进行映射,那么这将创建一个循环引用,如Dataccess> service and service> dataaccess .. - 它应该只有一种方式,即服务> dataaccess

我正在考虑使用Automapper( http://www.codeplex.com/AutoMapper )来处理这个问题,我是否在正确的路线上? 任何想法或例子真的很感激..

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

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

你已经遇到了EF v1的一个弱点。 现在,是的,使用AutoMapper进行路线肯定允许您将EF实体转换为“直接”业务实体并在更高层中使用它们。

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

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

    部分类客户:ICustomer

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM