【问题标题】:AutoMapper - mapping to interface propertiesAutoMapper - 映射到接口属性
【发布时间】:2020-05-01 11:31:33
【问题描述】:

我正在使用 AutoMapper 的可查询扩展将 Entity Framework Core 实体映射到 DTO。

var appleTrees = context.AppleTrees
  .ProjectTo<AppleTreeDto>(mapper.ConfigurationProvider);

一些 DTO 具有如下接口属性:

public IFruitTreeDto
{
  List<IFruitDto> Fruits { get; set; }
}

public class AppleDto : IFruitDto
{
  ...
}

public AppleTreeDto : IFruitTreeDto
{
  public List<IFruitDto> Fruits { get; set; }
}

映射配置位于 AutoMapper 配置文件中:

CreateMap<EF.AppleTree, AppleTreeDto>();
CreateMap<EF.Apple, AppleDto>();

目前,我收到一个异常“缺少从 Apple 到 IFruitDto 的地图。使用 CreateMap' 创建。添加该映射后,我得到了一个异常,即 IFruitDto 无法实例化(这是有道理的,它是一个接口,而不是一个类)。

当映射到 AppleTreeDto 时,如何告诉 Automapper 将 AppleDto 用于 Fruits 集合? 这样做的最佳方式是什么?我应该为每个接口属性编写一个类型转换器吗?

【问题讨论】:

  • edit您的问题包括您拥有的完整自动映射器配置以及如何将对象转换为minimal reproducible example的示例代码。
  • 一般ProjectTo和继承不要混用。但这不应该阻止你 trying :)

标签: automapper automapper-9


【解决方案1】:

感谢 Lucian 为我指明了正确的方向! 通过进行此更改使其工作:

CreateMap<EF.Apple, IAppleDto>().As<AppleDto>();

我的对象模型实际上有点复杂,我实际上会在系统中实现多个 IAppleDto,所以我不知道这个修复是否会成功,但现在它正在工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-07
    • 2022-08-19
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多