2017-08-26 1 views
0

Je voudrais faire la correspondance entre deux classes en utilisant les énoncés suivants:Comment cartographier la classe héritée en utilisant Mapster

var directoryDataModel = new DirectoryDM() 
{ 
    Title = "School Directory", 
    Persons = new List<PersonDM>() 
    { 
     new TeacherDM() { Name = "Johnson", Department = "Math" }, 
     new StudentDM() { Name = "Billy", Classes = new List<string>() { "Math", "Physics" } } 
    }     
}; 
var directoryViewModel = directoryDataModel.Adapt<DirectoryVM>(); 
var directoryDataModel2 = directoryViewModel.Adapt<DirectoryDM>(); 

Que dois-je faire pour qu'il gère le mappage des classes dérivées des personnes liste?

TeacherVM < => TeacherDM et StudentVM < => StudentDM

Modèle de données:

public class DirectoryDM 
{ 
    public string Title; 
    public List<PersonDM> Persons; 
} 
public class PersonDM 
{ 
    public string Name; 
} 
public class TeacherDM : PersonDM 
{ 
    public string Department; 
} 
public class StudentDM : PersonDM 
{ 
    public List<string> Classes; 
} 

Voir Modèle:

public class DirectoryVM 
{ 
    public string Title; 
    public List<PersonVM> Persons; 
    public bool AdditionalStuff; 
} 
public class PersonVM 
{ 
    public string Name; 
    public bool AdditionalStuff; 
} 
public class TeacherVM : PersonVM 
{ 
    public string Department; 
    public bool AdditionalStuff2; 
} 
public class StudentVM : PersonVM 
{ 
    public List<string> Classes; 
    public bool AdditionalStuff2; 
} 

Répondre

0

Je ne suis pas sûr que cela doit être fait à chaque fois ... ou juste une fois ... mais voici comment organiser les "configs" pour ce modèle.

  TypeAdapterConfig<PersonDM, PersonVM>.NewConfig() 
       .Include<TeacherDM, TeacherVM>() 
       .Include<StudentDM, StudenVM>(); 

      var viewModel = dataModel.Adapt<FlexSortVM>(); 

et

  TypeAdapterConfig<PersonVM, PersonDM>.NewConfig() 
       .Include<TeacherVM, TeacherDM>() 
       .Include<StudentVM, StudenDM>(); 

      var dataModel = viewModel.Adapt<FlexSortDM>();