AutoMap свойство к свойству под-собственности - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть эта простая модель данных:

// Model
public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
    .... Another values here ....
}

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public Address Address { get; set; }
    .... Another values here ....
}

// ViewModel
public class PersonViewModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string ZipCode { get; set; }
}

Я хочу сопоставить (используя AutoMapper ) значения PersonViewModel с соответствующими свойствами (где AutoMapper обнаруживает, должно ли свойство находиться в корневом объекте или внутри подобъекта). Принимая во внимание, AutoMapper не должен создавать ни объекта Person, ни Address (объекты должны быть созданы вручную для заполнения других свойств перед автоматическим сопоставлением), и AutoMapper использует уже существующие объекты. Например:

var addressObj = new Address
{

    ... Filling some values...

};
var personObj = new Person
{

    Address = addressObj;
    ... Filling some values...

};

mapper.Map(personViewModelObj, personObj); // How to make this work for both Person and Address properties?

Как заставить это автоматическое сопоставление работать как для свойств человека, так и для свойств адреса?

Должен ли я добавить два правила сопоставления (для адреса и для человека) и выполнить mapper.Map() дважды?

1 Ответ

0 голосов
/ 25 апреля 2018

Используя комментарии @Jasen, я заработал. Основная проблема заключалась в том, что я картирую в обратном направлении. Это предложение в официальной документации решает проблему:

Разблокировка настроена только для ReverseMap. Если вы хотите разблокировать, вы должны настроить Entity -> Dto, а затем позвонить ReverseMap, чтобы создать конфигурацию раскладывания типа карты из Dto -> Entity.

Вот ссылка:

https://github.com/AutoMapper/AutoMapper/blob/master/docs/Reverse-Mapping-and-Unflattening.md

Другими словами, чтобы работать нелестно, я должен (или должен) сопоставить это направление:

CreateMap<HierarchicalObject, FlattenedObject>()
    .ReverseMap();
...