diff --git a/src/AutoMapper/ProfileMap.cs b/src/AutoMapper/ProfileMap.cs index 2f13afe4d4..02b3021277 100644 --- a/src/AutoMapper/ProfileMap.cs +++ b/src/AutoMapper/ProfileMap.cs @@ -263,10 +263,11 @@ private void AddMemberMaps(LambdaExpression[] includedMembers, TypeMap mainMap, private void ApplyDerivedMaps(TypeMap baseMap, TypeMap typeMap, IConfigurationProvider configurationProvider) { - foreach (var inheritedTypeMap in configurationProvider.GetIncludedTypeMaps(typeMap.IncludedDerivedTypes)) + foreach (var derivedMap in configurationProvider.GetIncludedTypeMaps(typeMap.IncludedDerivedTypes)) { - inheritedTypeMap.IncludeBaseTypes(typeMap.SourceType, typeMap.DestinationType); - ApplyDerivedMaps(baseMap, inheritedTypeMap, configurationProvider); + derivedMap.IncludeBaseTypes(typeMap.SourceType, typeMap.DestinationType); + derivedMap.AddInheritedMap(baseMap); + ApplyDerivedMaps(baseMap, derivedMap, configurationProvider); } } } diff --git a/src/UnitTests/MappingInheritance/IgnoreShouldBeInherited.cs b/src/UnitTests/MappingInheritance/IgnoreShouldBeInherited.cs index 612308c792..b439cfbe04 100644 --- a/src/UnitTests/MappingInheritance/IgnoreShouldBeInherited.cs +++ b/src/UnitTests/MappingInheritance/IgnoreShouldBeInherited.cs @@ -4,6 +4,38 @@ namespace AutoMapper.UnitTests.Bug { + public class IgnoreShouldBeInheritedRegardlessOfMapOrder : AutoMapperSpecBase + { + public class BaseDomain + { + } + + public class SpecificDomain : BaseDomain + { + public string SpecificProperty { get; set; } + } + + public class Dto + { + public string SpecificProperty { get; set; } + } + + protected override MapperConfiguration Configuration => new MapperConfiguration(cfg => + { + cfg.CreateMap(); + cfg.CreateMap() + .ForMember(d => d.SpecificProperty, m => m.Ignore()) + .Include(); + }); + + [Fact] + public void Should_map_ok() + { + var dto = Mapper.Map(new SpecificDomain { SpecificProperty = "Test" }); + dto.SpecificProperty.ShouldBeNull(); + } + } + public class IgnoreShouldBeInherited : AutoMapperSpecBase { public class BaseDomain