2009-05-20 46 views
6

一直忙于创建一个新的应用程序,基本上我有我的数据访问,服务层和表示层...所有的伟大作品,但我使用由EF返回的实体类。这里的问题是我传递到表示层所以我需要添加实体框架引用/ dataccess到表示层 - 不好:使用存储库模式与实体框架一起使用的Automapper?

所以我的想法是以下,并寻找一些帮助和确认,我是沿着走行权...

  1. 中,如客户服务层创建一组类,订单等由于表示层到服务层中的参考..

  2. 当客户实体在数据访问中返回,我将返回实体类即客户到服务我会在这里做映射 - 不太确定我喜欢这个吗?

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

我想用Automapper(http://www.codeplex.com/AutoMapper)照顾这个,我在右边线???任何想法或例子真的很感激..

正如我所说的唯一的事情是,当我从dataaccess返回到服务层(使用Iqueryable)我需要映射这些从实体类和使用标准集合类。

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

回答

3

你已经击中了EF v1的一个弱点。现在,是的,使用AutoMapper进行路线定义允许您将EF实体转换为“直线”商业实体,并在较高层中使用它们。另外,由于使用.NET 4.0/Visual Studio 2010,EF v4应该会在许多问题领域中带来许多缓解 - 支持您自己的直接POCO(Plain Old CLR Objects)以及很多很多更多。看看EF Design Blog。关于EF v4,该团队最近发布了一些非常有趣,非常有前途的帖子。我对此很期待!

马克

0
  1. 您可以使用EF对象在Web项目中,如果你提取其接口到你的核心/常用项目,并从仓库或服务返回的接口类型,该Web项目使用。 可以使EF对象实现你的接口,通过创建分部类,并增加在那里:

    部分类客户:ICustomer

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