我正在使用.NET Core 2.0和AutoMapper 6.2.2。
我正在使用<h1 id ="contactFooter">{{localize('_testVal')}}</h1>
来确保我的映射是正确的,并且我已经定义了一些AssertConfigurationIsValid
,它们共享一些映射规则:
AutoMapper.Profile
在每个id
映射中被忽略。entity <=> DTO
映射到每个中的AutoGeneratedAppid
AppId
映射。例如:
entity <=> DTO
由于在每个映射中都要以相同的方式忽略/映射多个映射和多个字段,我试图找到一种方法来避免必须在每个配置文件中定义这样的通用规则:
public class Role
{
public long Id { get; set; }
public string AutoGeneratedAppId { get; set; }
public string Name { get; set; }
}
public class RoleDTO
{
public string AppId { get; set; }
public string Name { get; set; }
}
public class RoleProfile : AutoMapper.Profile
{
public RoleProfile()
{
CreateMap<Role, RoleDTO>();
CreateMap<RoleDTO, Role>();
//.ForMember(entity => entity.Id, opt => opt.Ignore())
//.ForMember(entity => entity.AutoGeneratedAppId, opt => opt.MapFrom(dto => dto.AppId));
}
}
.ForMember(entity => entity.Id, opt => opt.Ignore());
由于未映射的.ForMember(entity => entity.AutoGeneratedAppId, opt => opt.MapFrom(dto => dto.AppId));
和AutoMapperConfigurationException
属性导致AssertConfigurationIsValid
映射时,我无法找到避免dto => entity
id
的方法。
我的映射器配置,我的失败试验,如下:
AutoGeneratedAppId
我的 protected override MapperConfiguration CreateConfiguration()
{
var config = new MapperConfiguration(cfg =>
{
cfg.DisableConstructorMapping();
cfg.AddProfiles(Assemblies);
// Global ignoring - alternative 1
cfg.ShouldMapProperty = prop =>
prop.Name != "Id";
// Global ignoring - alternative 2
cfg.AddGlobalIgnore("Id");
// Global ignoring - alternative 3
cfg.ForAllPropertyMaps(map =>
map.SourceMember.Name.EndsWith("Id"),
(map, configuration) =>
{
configuration.Ignore();
});
// Entity.AutoGeneratedAppId => DTO.AppId
cfg.RecognizePrefixes("AutoGenerated");
// DTO.AppId => Entity.AutoGeneratedAppId
cfg.RecognizeDestinationPrefixes("AutoGenerated");
});
return config;
}
配置如下:
Startup
提前致谢。