Automapper找到最佳映射[关闭]

问题描述 投票:1回答:2

我正在使用AutoMapper和Entity Framework。我有一个实体层次结构:

  • 人 学生 工人

每个业务对象都有一个映射到数据库中的实体。要将业务对象转换为我正在使用AutoMapper v6.2.2的实体,我想知道是否有更好的方法来找到“最佳”映射,或者我真的需要在代码中使用这样的东西:

    public PersonEntity MapPerson(Person person)
    {
        switch (person.Type)
        {
            case PersonType.Unknown:
                return Mapper.Map<PersonEntity>(person);
            case PersonType.Student:
                return Mapper.Map<StudentEntity>(person);
            case PersonType.Worker:
                return Mapper.Map<WorkerEntity>(person);

            default:
                throw new ArgumentOutOfRangeException();
        }
    }

好消息是,我已经有一个“类型”枚举器用于鉴别器和类似的东西,但它仍然感觉不对。也许你可以帮忙。

c# entity-framework mapping automapper
2个回答
1
投票

你可以这样做...

var mapped = Mapper.Map(person, person.GetType(), typeof(PersonEntity));

有关更多详细信息,请参阅AutoMapper文档。 http://docs.automapper.org/en/stable/Mapping-inheritance.html


1
投票

AutoMapper能够使用mapping inheritance。映射应如下所示:

class PersonMapperProfile : AutoMapper.Profile
{
    public PersonMapperProfile()
    {
        this.CreateMap<Student, StudentEntity>();
        this.CreateMap<Worker, WorkerEntity>();
        this.CreateMap<Person, PersonEntity>()
            .Include<Student, StudentEntity>()
            .Include<Worker, WorkerEntity>();
    }
}

现在,当您将Person映射到PersonEntity时,AutoMapper将创建正确的基本类型或子类型。

© www.soinside.com 2019 - 2024. All rights reserved.