Automapper сплющивает объект с наследованием - PullRequest
0 голосов
/ 12 октября 2018

У меня есть модель со свойствами, которые мне нужно сопоставить с сущностями, которые принадлежат абстрактному классу ClassAModel и ClassBModel - один к одному с ClassA и ClassB

public class Model
{
    public int Number { get; set; }
    public ClassAModel ClassAModel { get; set; }
    public ClassBModel ClassBModel { get; set; }
}

public abstract class AbstractClass
{
    public int Number { get; set; }
}

public class ClassA : AbstractClass
{

}

public class ClassB : AbstractClass {

}

Я не знаю, как сказать autopper:карта ClassA от объекта ClassAModel

1 Ответ

0 голосов
/ 12 октября 2018

Этот ответ предполагает, что вы пытаетесь сопоставить Model с ClassA, используя свойства ClassAModel и числовое свойство с Model:

CreateMap<Model, ClassA>()
    .ConstructProjectionUsing(x => new ClassA(){Name = x.ModelClassA.Name, Number = x.Number});

Этот ответ предполагает, что вы хотитесопоставить Model с экземплярами ClassA и ClassB.При этом используется динамическое связывание двух объектов.

CreateMap<Model, dynamic>()
                .ConstructProjectionUsing(x =>  new { A = new ClassA() { Name = x.ModelClassA.Name, Number = x.Number },
                    B = new ClassB() { Department  = x.ModelClassA.Name, Number = x.Number }});

Надеемся, что это полезно.

Чтобы уменьшить ручное отображение, вы можете сделать что-то вроде этого (непроверенный код):

CreateMap<Model, ClassA>()
    .ConstructProjectionUsing(x => Mapper.Map<ClassA>(x.ModelClassA))
    .ForMember(x => x.Number, y => y.MapFrom(src => src.Number));

CreateMap<Model, ClassB>()
    .ConstructProjectionUsing(x => Mapper.Map<ClassB>(x.ClassBModel))
    .ForMember(x => x.Number, y => y.MapFrom(src => src.Number));

CreateMap<Model, dynamic>().ConstructProjectionUsing(x => new {A = Mapper.Map<Model, ClassA>(x), B = Mapper.Map<Model, ClassB>(x)});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...