Asp.net mvc 将Automapper与数据库优先方法结合使用的体系结构
我有以下解决方案结构Asp.net mvc 将Automapper与数据库优先方法结合使用的体系结构,asp.net-mvc,entity-framework,asp.net-web-api,architecture,automapper-3,Asp.net Mvc,Entity Framework,Asp.net Web Api,Architecture,Automapper 3,我有以下解决方案结构 Solution ProductServiceApi Business DataAccess DTO Contract 我在数据访问层使用EntityFramework。它具有.edmx文件和实体类(例如产品)。我的域类位于DTO层(ProductDto)。我正在WebApiConfig.cs文件中创建地图。为了映射DTO和DataAccess层实体,我必须在ProductServiceApi中添加对DTO层和DataAccess层的引用 e.g. Mapp
Solution
ProductServiceApi
Business
DataAccess
DTO
Contract
我在数据访问层使用EntityFramework。它具有.edmx文件和实体类(例如产品)。我的域类位于DTO层(ProductDto)。我正在WebApiConfig.cs文件中创建地图。为了映射DTO和DataAccess层实体,我必须在ProductServiceApi中添加对DTO层和DataAccess层的引用
e.g. Mapper.CreateMap<ProductDto, Product>();
例如Mapper.CreateMap();
但我认为在我的ProductServiceApi中添加对dataAccess层的引用是个坏主意
我应该做些什么来避免这种情况?我是否应该在DTO层中添加一个引用自动映射器,并在那里映射DTO和实体?理想的解决方案是什么。我已经看过一些在线教程,但找不到合适的解决方案 我对这个问题准备了一个相当长的答案,但当我重新阅读时,我意识到我的答案只会误导你。所以这里有一个简短的答案:) 但我认为在我的ProductServiceApi中添加对dataAccess层的引用是个坏主意
- 如果我怀疑
是一个WebAPI项目,那么你真的不能(也不应该)做任何事情来避免这个问题;在本例中,它有效地充当了ProductServiceApi
的*,为了做到这一点,它必须有对所有这些内容的引用,否则它无法为您组成对象映射Automapper
- 从设计的角度来看,这完全没有问题
; 您可以“顺其自然”并在单独的程序集中进行映射配置,但是
必须通过关联引用该程序集,这意味着它仍然直接引用较低的层ProductServiceApi
- 您有一个单独的
层,我认为它包含抽象……应该将其分为多个层,每个层都包含一组与系统某个部分相关的内聚抽象契约
- 另外,在DTO层中定义域对象听起来有点奇怪
*(我知道,组合根通常用于IoC库的上下文中,但在这种情况下,您正在组合类型之间的映射,这是一种IoC,因此我认为原则是相同的).我对这个问题准备了一个相当长的答案,但当我重新阅读时,我意识到我的答案只会误导你。所以这里有一个简短的答案:) 但我认为在我的ProductServiceApi中添加对dataAccess层的引用是个坏主意
- 如果我怀疑
是一个WebAPI项目,那么你真的不能(也不应该)做任何事情来避免这个问题;在本例中,它有效地充当了ProductServiceApi
的*,为了做到这一点,它必须有对所有这些内容的引用,否则它无法为您组成对象映射Automapper
- 从设计的角度来看,这完全没有问题
; 您可以“顺其自然”并在单独的程序集中进行映射配置,但是
必须通过关联引用该程序集,这意味着它仍然直接引用较低的层ProductServiceApi
- 您有一个单独的
层,我认为它包含抽象……应该将其分为多个层,每个层都包含一组与系统某个部分相关的内聚抽象契约
- 另外,在DTO层中定义域对象听起来有点奇怪