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

mar*_*ith 6 c# entity-framework 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才能访问实体类.

mar*_*c_s 3

您已经触及 EF v1 的弱点之一。现在,是的,使用 AutoMapper 肯定可以让您将 EF 实体转换为“直接”业务实体,并在更高层中使用它们。

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

马克