2016-08-05 2 views
0

Рассмотрим следующий пример:Можно ли использовать AutoMapper для заполнения свойств базового класса?

public class Parent 
{ 
    public string Id {get; set;} 

    public Parent(string id) 
    { 
     Id = id; 
    } 
} 

public class Child : Parent 
{ 
    public string Name {get; set;} 

    public Child(string id, string name) : base(id) // <-- call base constructor 
    { 
     Name = name; 
    } 
} 

Это классический пример того, как установить свойство в базовом классе.

Теперь скажите, что мой базовый класс содержит 50 свойств. Я знаю, что могу задать каждое свойство по строкам, но мне было интересно, могу ли я использовать AutoMapper для заполнения свойств?

Я хотел бы сделать что-то подобное в базовом классе:

public class MyClass 
{ 
    public MyClassMapData(MY_DATA data) 
      { 
       // DOC_TRACK_MAIN 
       var config = new MapperConfiguration(c => 
       { 
        c.CreateMap<MY_DATA , MyClass>(); 
       }); 

       // This will map the first 45 properties. 
       var mappedData = config.CreateMapper().Map<MY_DATA , MyClass>(data.MyData); 

       // DOC_TRACK_DETAILS 
       mappedData.PROP_46 = data.Field1; 
       mappedData.PROP_47 = data.Field2; 
       mappedData.PROP_48 = data.Field3; 
       mappedData.PROP_49 = data.Field4; 
       mappedData.PROP_50 = data.Field5;    

      // How would I set mappedData to my current instance?  
      } 

    // My 50 properties... 
} 

ответ

0

Если я правильно понимаю, вы смотрите на карту mappedData на ваш текущий класс. Если вы измените строку var mappedData = config.CreateMapper().Map<MY_DATA , MyClass>(data.MyData); на config.CreateMapper().Map<MY_DATA , MyClass>(data.MyData, this);, это должно отобразить эти данные на ваш класс. Затем вы можете установить PROP_46 - PROP_50 в классе вручную

Смежные вопросы