Automapper RecognizePostfix 方法不适用于数组哦后缀
Automapper RecognizePostfix method doesn't works with an array oh postfixes
终于让自动映射器开始工作了:, 。
现在我有这样的东西:
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());
}
}
我想优化映射(转到另一个问题,不要让另一个问题太复杂),在AutoMapper Configuration Documentation at GitHub,我看到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.AutoMapperConfigurationException: Unmapped members were
found. Review the types and members below. Add a custom mapping
expression, ignore, add a custom resolver, or modify the
source/destination type
我做错了什么?
实际上我不知道这是否应该被视为错误或者它应该如何工作,但显然 pre/postfixes 仅适用于它所在的配置文件已定义。
对于您的情况,您可以快速解决问题,将 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());
}
}
终于让自动映射器开始工作了:
现在我有这样的东西:
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());
}
}
我想优化映射(转到另一个问题,不要让另一个问题太复杂),在AutoMapper Configuration Documentation at GitHub,我看到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.AutoMapperConfigurationException: Unmapped members were found. Review the types and members below. Add a custom mapping expression, ignore, add a custom resolver, or modify the source/destination type
我做错了什么?
实际上我不知道这是否应该被视为错误或者它应该如何工作,但显然 pre/postfixes 仅适用于它所在的配置文件已定义。
对于您的情况,您可以快速解决问题,将 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());
}
}