gpt4 book ai didi

c# - IQueryable Projection into DTO - automapper 可以在这种情况下提供帮助吗?

转载 作者:太空宇宙 更新时间:2023-11-03 10:21:17 31 4
gpt4 key购买 nike

我正在查看我刚刚参与的项目的一些 C# WebAPI 代码,并注意到数据访问的一般模式如下所示:

  1. Controller 直接调用存储库请求数据。 Controller 的返回类型是 IQueryable,其中 T 是 DTO(不是实体)
  2. 存储库使用 dbContext 选择一个或多个实体(连接等),然后使用 select 进行投影以将其内联转换为相关 DTO 的可查询对象。这一切都是在线完成的,有时会占用大量代码行。
  3. 这个 IQueryable 被返回给 Controller ,然后 Controller 返回数据。

所以我担心这里的一些事情。其一,难道不应该使用像 AutoMapper 这样的东西来处理这个问题,这样每个特定的存储库就不会充斥着从一个(或多个)实体到一个 DTO 的这些相当大的投影吗?

再次提醒,大多数时候请记住,它不是一个实体(即 User -> UserDto),而是映射到一个扁平化 DTO 的多个实体。因此,例如 Class1、Class2、Class3、Class4 都映射到 AggregatedClassDto。这是否应该在存储库层完成,如果是,Automapper 是否适合这种情况?

如果我将映射逻辑移到其他地方,我认为这一切都将是自定义的(从属性/字段的角度来看,几乎没有任何东西可以转换 1-1)。这不就是将所有代码移动到大量自定义转换器或其他东西吗?

最后,还有其他需要关注的地方吗?

谢谢!

最佳答案

AutoMapper can certainly handle that using AutoMapper.QueryableExtensions.

即使您的类和属性不是一对一映射,您也可以定义非常复杂的映射。您可以在 AutoMapper Wiki 上阅读有关可查询扩展 的更多信息.

就在存储库内完成映射而言,从单一职责的角度来看,您可能不应该在存储库内执行映射并返回实体。

关于c# - IQueryable Projection into DTO - automapper 可以在这种情况下提供帮助吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33395728/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com