C# 使用存储库模式与实体框架一起使用的Automapper?

C# 使用存储库模式与实体框架一起使用的Automapper?,c#,entity-framework,repository-pattern,C#,Entity Framework,Repository Pattern,一直忙于创建一个新的应用程序,基本上我有我的数据访问,服务层和表示层。。。所有这些都很好,但我使用的是EF返回的实体类。这里的问题是我将它们传递到表示层,所以我需要将实体框架引用/数据访问添加到表示层-不好: 因此,我的想法如下,并正在寻求一些帮助和确认,我正在走上正确的路线 在服务层中创建一组类,如customer、order等,因为表示层引用了服务层 当在DataAccess中返回客户实体时,我会将实体类即customer返回到服务,并在此处进行映射-不太确定我是否喜欢这样 哪里是我用于映射

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

因此,我的想法如下,并正在寻求一些帮助和确认,我正在走上正确的路线

  • 在服务层中创建一组类,如customer、order等,因为表示层引用了服务层

  • 当在DataAccess中返回客户实体时,我会将实体类即customer返回到服务,并在此处进行映射-不太确定我是否喜欢这样

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

  • 我在考虑用Automapper()来处理这个问题,我说的对吗???任何想法或例子都值得欣赏

    正如我所说的,当我从dataaccess返回到服务层(使用Iqueryable)时,我需要将这些映射到实体类,并使用标准集合类


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

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

    另外,将随.NET4.0/VisualStudio2010一起发布的EFV4应该会在许多问题领域带来很大的缓解—支持您自己的、直接的POCO(普通的旧CLR对象)以及更多。看看这本书。团队最近发布了一些关于EFV4的非常有趣、非常有前途的帖子。我很期待

    马克

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

    部分类别客户:ICustomer

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