我正在使用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();
}
}
好消息是,我已经有一个“类型”枚举器用于鉴别器和类似的东西,但它仍然感觉不对。也许你可以帮忙。
你可以这样做...
var mapped = Mapper.Map(person, person.GetType(), typeof(PersonEntity));
有关更多详细信息,请参阅AutoMapper文档。 http://docs.automapper.org/en/stable/Mapping-inheritance.html
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将创建正确的基本类型或子类型。