自动映射器识别后缀方法不适用于数组哦后缀



终于让automapper工作了:上一个问题1,上一个第2。

现在我有这样的东西:

public class Steps
{
    public PersonalModel Personal1 { get; set; }
    public CompanyModel Company2 { get; set; }
    public SposeModel Spose3 { get; set; }
}    
public class PersonalModel
{
    public int Id { get; set; }
}    
public class CompanyModel
{
    public string Name { get; set; }    
}
public class SposeModel
{
    public string Age { get; set; }    
}

和:

public class Content
{
    public string Dummy1 { get; set; }
    public string Dummy2 { get; set; }
    public string Dummy3 { get; set; }
    public string Dummy4 { get; set; }
    public string Dummy5 { get; set; }
    public Personal Personal { get; set; }
    public Company Company { get; set; }
    public Spose Spose { get; set; }
}    
public class Personal
{
    public int Id { get; set; }
}    
public class Company
{
    public string Name { get; set; }    
}
public class Spose
{
    public string Age { get; set; }    
}

除了名称和复杂性之外,这些对象在模式上与我的原始对象相似

映射如下:

public class AutoMapperConfig
{
    public static MapperConfiguration MapperConfiguration { get; set; }
    public static void Configure()
    {
        MapperConfiguration = new MapperConfiguration(cfg => {
            cfg.AddProfile<Out>();
            cfg.CreateMap<Steps, Content>();
        });
        MapperConfiguration.AssertConfigurationIsValid();
    }
}
public class Out: Profile
{
   protected override void Configure()
   {
      CreateMap<PersonalModel, Personal>();
      CreateMap<CompanyModel, Company>();
      CreateMap<SposeModel, Spose>();
      CreateMap<Steps, Content>();
         .ForMember(dest => dest.Personal, opt => opt.MapFrom(src => src.Personal1))
         .ForMember(dest => dest.Company, opt => opt.MapFrom(src => src.Company2))
         .ForMember(dest => dest.Spose, opt => opt.MapFrom(src => src.Spose3))
         .ForMember(dest => dest.Dummy1, opt => opt.Ignore())
         .ForMember(dest => dest.Dummy2, opt => opt.Ignore())
         .ForMember(dest => dest.Dummy3, opt => opt.Ignore())
         .ForMember(dest => dest.Dummy4, opt => opt.Ignore())
         .ForMember(dest => dest.Dummy5, opt => opt.Ignore());
   }
}

我想优化映射(谈到了另一个问题,不要让另一个太复杂),就像在GitHub的AutoMapper配置文档中一样,我看到了RecognizePostfix方法。但当我把下一行放在配置部分:

cfg.RecognizePostfix(new string[3] {"1", "2", "3"});

并从配置文件中删除下一个:

.ForMember(dest => dest.Personal, opt => opt.MapFrom(src => src.Personal1))
.ForMember(dest => dest.Company, opt => opt.MapFrom(src => src.Company2))
.ForMember(dest => dest.Spose, opt => opt.MapFrom(src => src.Spose3))

我得到一个例外:

AutoMapper.AutoMapperConfiguration异常:未映射的成员为建立查看下面的类型和成员。添加自定义映射表达式、忽略、添加自定义冲突解决程序或修改源/目的地类型

我在这里做错了什么?

实际上,我不知道这是否应该被视为一个bug,也不知道它应该如何工作,但显然预/后修复只适用于定义它的概要文件。

在您的情况下,您可以快速解决将RecognizePostfixes调用移动到配置文件的问题:

public static void Configure()
{
    MapperConfiguration = new MapperConfiguration(cfg => {
        cfg.AddProfile<Out>();
    });
    MapperConfiguration.AssertConfigurationIsValid();
}
...

配置文件:

public class Out : Profile
{
    protected override void Configure()
    {
        RecognizePostfixes("1", "2", "3");
        CreateMap<PersonalModel, Personal>();
        CreateMap<CompanyModel, Company>();
        CreateMap<SposeModel, Spose>();
        CreateMap<Steps, Content>()
           .ForMember(dest => dest.Dummy1, opt => opt.Ignore())
           .ForMember(dest => dest.Dummy2, opt => opt.Ignore())
           .ForMember(dest => dest.Dummy3, opt => opt.Ignore())
           .ForMember(dest => dest.Dummy4, opt => opt.Ignore())
           .ForMember(dest => dest.Dummy5, opt => opt.Ignore());
    }
}

最新更新