【发布时间】:2015-10-28 15:54:24
【问题描述】:
我正在查看我刚刚加入的一个项目的一些 C# WebAPI 代码,并注意到数据访问的一般模式是这样的:
- 控制器直接调用存储库请求数据。控制器的返回类型是 IQueryable,其中 T 是 DTO(不是实体)
- 存储库使用 dbContext 选择一个或多个实体(连接等),然后使用 select 进行投影,将其内联投射到相关 DTO 的 iqueryable 中。这一切都是内联完成的,有时会占用大量代码。
- 这个 IQueryable 被返回给控制器,然后控制器返回数据。
所以我在这里担心一些事情。一方面,不应该使用像 AutoMapper 这样的东西来处理这个问题,这样每个特定的存储库就不会被从一个(或多个)实体到一个 DTO 的这些相当大的投影淹没吗?
同样,请记住,大多数情况下,它不是一个实体(即 User -> UserDto),而是多个实体映射到一个扁平化 DTO。因此,例如 Class1、Class2、Class3、Class4 都映射到 AggregatedClassDto。这是否应该在存储库层中完成,如果是,Automapper 在这种情况下是否合适?
如果我将映射逻辑移到其他地方,我认为这一切都将是自定义的(从属性/字段的角度来看,几乎没有任何东西可以转换为 1-1)。这不只是将所有代码移动到许多自定义转换器或其他东西吗?
最后,还有其他需要关注的方面吗?
谢谢!
【问题讨论】:
标签: c# asp.net entity-framework asp.net-web-api repository-pattern