Automapper не устанавливает значения свойств навигации из хранимой процедуры

Мой Customer.Model имеет свойство навигации:

public Address Address { get; set; }

У меня есть хранимая процедура, которая имеет выбор, который выглядит следующим образом:

 SELECT 
     c.*, 
     a.City AS AddressCity, 
     a.State AS AddressState

Эти значения оказываются в сложном объекте, который автоматически генерирует EF6:

Customer_GetCustomers_Result

В моем конфиге AutoMapper у меня есть:

CreateMap<Customer_GetCustomers_Result, Model.Customer>();

В моем репозитории у меня есть:

public IEnumerable<Model.Customer> GetCustomers()
{
    var cList = context.Customer_GetCustomers();
    return Mapper.Map<List<Model.Customer>>(cList);
}

cList заканчивается быть типом Customer_GetCustomers_Result поэтому AutoMapper преобразует его в Model.Customer и возвращает, так что мое приложение может использовать его.

Мне сказали, что AutoMapper будет автоматически установлен Customer.Address.City а также Customer.Address.State если бы я следовал этому соглашению об именах. Что мне не хватает?

1 ответ

Вы ссылаетесь на то, что называется сплющиванием. Но все наоборот. AutoMapper может отображать Customer.Address.City в собственность Target.AddressCity, но не наоборот. Это должно было бы создать Address объект и только установить его City свойство, а затем имейте в виду, что для второго отображения то же самое Address должен быть использован.

Слишком много сложностей и крайних случаев, чтобы ввязываться в инструмент, который должен выполнять простую работу.

Другие вопросы по тегам