Я сопоставляю свои сущности с DTO, используя AutoMapper. Некоторые из моих сущностей имеют виртуальные свойства, которые могут быть переопределены производными сущностями. Я сопоставляю виртуальные свойства, используя базовые классы, в которых они определены. Однако при сопоставлении производных классов AutoMapper отображает базовую реализацию виртуальных свойств вместо переопределенной.
Я начну с определений классов:
public class BaseType
{
public virtual string Title
{
get { return string.Empty; }
}
}
public class DerivedType : BaseType
{
public override string Title
{
get { return Name; }
}
public string Name { get; set; }
}
public class BaseTypeDto
{
public string Title { get; set; }
}
public class DerivedTypeDto : BaseTypeDto
{
public string Name { get; set; }
}
Теперь для конфигурации сопоставления:
CreateMap<BaseType, BaseTypeDto>()
.ForMember(n => n.Title, p => p.MapFrom(q => q.Title ?? "-"))
.Include<DerivedType, DerivedTypeDto>();
CreateMap<DerivedType, DerivedTypeDto>()
И, наконец, отображение:
DerivedTypeDto dto = Mapper.Map<DerivedType, DerivedTypeDto>(instance);
Когда я помещаю отображение заголовка в вызов CreateMap, который настраивает производный тип, он работает. Но так как у меня есть около 20 производных типов, я действительно хочу, чтобы отображение заголовка было настроено для базового класса, без необходимости повторять его для каждого производного класса.
Возможно ли это с AutoMapper?