全局/共享映射配置:自定义映射&忽略

时间:2018-02-19 09:29:30

标签: c# .net-core automapper

我正在使用.NET Core 2.0和AutoMapper 6.2.2。

我正在使用<h1 id ="contactFooter">{{localize('_testVal')}}</h1> 来确保我的映射是正确的,并且我已经定义了一些AssertConfigurationIsValid,它们共享一些映射规则:

  • 由于我在模型实体和DTO之间进行映射,我想要字段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

提前致谢。

0 个答案:

没有答案