Как сопоставить виртуальное свойство без явного сопоставления его для каждого производного класса, который переопределяет свойство с помощью AutoMapper? - PullRequest
3 голосов
/ 05 декабря 2010

Я сопоставляю свои сущности с 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?

1 Ответ

1 голос
/ 05 сентября 2011

Не могли бы вы использовать опцию ConstructUsing()?Это позволит вам постоянно иметь делегата для сопоставления с объектом базового класса?

CreateMap<basetype, baseTypeDto>()
    .ConstructUsing(y => base.title = basetype.title);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...