2017-12-30 16 views
1

Ich benutze AutoMapper mit Entity Framework. Ich habe eine Hierarchie von Entitäten:Automapper finde das beste Mapping

  • Person
    • Studenten
    • Worker

Jedes Business-Objekt verfügt über eine Karte auf eine Entität in der Datenbank. die Business-Objekte in Einheiten konvertieren Ich verwende AutoMapper V6.2.2 Ich frage mich, ob es einen besseren Weg, um die „beste“ Mapping oder tun, um finde ich so etwas wie dies wirklich im Code haben müssen:

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(); 
     } 
    } 

Die gute Sache ist, ich habe bereits eine "Type" -Enum für Diskriminator und solche Dinge, aber es fühlt sich immer noch falsch an. Vielleicht kannst du helfen.

Antwort

1

AutoMapper ist in der Lage mapping inheritance. Die Abbildung sollte wie folgt aussehen:

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

Nun, wenn Sie eine Person-PersonEntity Karte wird AutoMapper den richtigen Basistyp oder Untertypen erstellen.