Я использую AutoMapper для сопоставления с моим DataLayer (EF6 DbFirst AutoGenerated layer) на моем ModelLayer (Pocos/Dtos). Одна вещь, которую я смущает, - это использование хранимых процедур, которые они возвращают сложный объект, такой как Customer_GetCustomers_Result, поэтому я должен сопоставить это с моим CustomerPoco с AutoMapper, и я теряю свойства объекта внешнего ключа, такие как Customer.Address, поскольку они не находятся в моем сложном типе ,Сохраненная процедура возвращает сложный тип, я использую AutoMapper для сопоставления его с моей моделью, но объекты внешнего ключа не получают
Вот пример моего CustomerPoco:
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
public string Phone { get; set; }
public string Fax { get; set; }
public string Website { get; set; }
public int AddressId { get; set; }
// THESE END UP NOT GETTING SET
public List<CustomerContact> Contacts { get; set; }
public Address Address { get; set; }
}
В моем GetCustomers хранимого процедуру позволяет сказать, что я могу сделать что-то простое, как: SELECT * FROM ЗАКАЗЧИКА. Он возвращает сложный объект context.Customer_GetCustomers_Result. Затем мне нужно сопоставить этот сложный объект с моим CustomerPoco. Контакты и адрес не устанавливаются. Как мне это сделать?
Вот мои отображения для Клиента:
CreateMap<Customer, Model.Customer>()
.ForMember(dest => dest.Contacts, opt => opt.MapFrom(src => src.CustomerContacts));
CreateMap<Customer_GetCustomers_Result, Model.Customer>();
Это на самом деле, возможно, был плохой вопрос. Я считаю, что если я действительно хочу использовать хранимые процедуры для возврата своих списков, мне нужно будет объединить и фактически вернуть свойства адреса в моем select, например ... a.Address1, a.Address2 и т. Д. Тогда есть способ чтобы сопоставить их с Model.Customer.Address отсюда, хотя все они разделены на отдельные свойства?
Не могли бы вы показать сопоставления, которые вы установили? –
Хорошо, я добавил их.Причина, по которой я добавил ForMember для контактов, состояла в том, что я изменил имя из CustomerContacts на Contacts в моей модели. Должен ли я добавить что-то к моим сопоставлениям, чтобы убедиться, что объект Address привязан? Я заметил, что автогенерируемый класс Customer_GetCustomers_Result не имеет в нем свойства объекта Address, как у Data.Customer и моего класса Model.Customer. Это имеет смысл, поскольку в большинстве случаев proc возвращает AddressId. Есть ли способ обойти это? – JTunney