【问题标题】:Automapper Map one class to twoAutomapper 将一类映射到二类
【发布时间】:2022-11-19 20:13:15
【问题描述】:

我有一个使用 Automapper 12.0.0 的 ASP.NET Core 6 应用程序,我定义了一个映射器配置文件,我在其中将一个类映射到两个不同的类:

public class ModelMapper : AutoMapper.Profile
{
   public ModelMapper()
   {
      CreateMap<A, B1>().ReverseMap();
      CreateMap<A, B2>().ReverseMap();
   }
}

接着:

services.AddAutoMapper(typeof(ModelMapper));

当我尝试从 B2 映射到 A 时出现此错误:

AutoMapperMappingException:缺少类型映射配置或不支持的映射。

映射类型:B2 -> A

有没有办法设置 AutoMapper 能够从 A 映射到 B1 和 B2 以及从 B1 到 A 和从 B2 到 A ?

【问题讨论】:

  • 我认为您需要在 Configure 方法中添加这些行。 CreateMap<A, B1>().ReverseMap(); CreateMap<A, B2>().ReverseMap();
  • 复制会有所帮助。创建一个我们可以执行并看到失败的gist

标签: c# automapper .net-6.0


【解决方案1】:

也许总是我,但以这种方式添加配置文件对我来说从来没有用过。

所以我总是这样添加它们:

    public static IServiceCollection AddAutoMapper(this IServiceCollection serviceCollection)
{
    serviceCollection.AddSingleton<IMapper>(factory =>
    {
        var config = new MapperConfiguration(x => x.AddProfiles(new Profile[]
        {
            new ModelMapper()
        }));

        return new Mapper(config);
    });

    return serviceCollection;
}

还要确保 A 类和 B 类与名称等匹配。如果不是,则必须删除反向映射并添加 MapFrom

【讨论】:

  • 不幸的是,这对我不起作用,结果与使用初始化辅助方法完全相同。 “确保 A 类和 B 类与名称等匹配”是什么意思?类名不需要匹配。属性名称确实匹配。
【解决方案2】:

我发现了问题。

B1 具有 C1 类属性 B2 具有 C2 类的属性 A 拥有 D 类财产

我忘了映射 C1->D 和 C2->D

该错误具有误导性,因为它提到了 B1,但真正的问题是里面B1.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 2021-04-30
    • 1970-01-01
    • 1970-01-01
    • 2016-07-06
    • 2020-02-12
    相关资源
    最近更新 更多