Я пытаюсь сопоставить объекты моего домена с моделью представления отчета. Все хорошо работало в тестировании, где я подделывал код структуры сущности и использовал построитель для возврата полностью заполненного объекта pocco. Теперь, когда я фактически ударяю базу данных и возвращаю данные, я вижу некоторые ошибки динамического прокси-сервера.
Вот пример моего кода:
public class ContactMapping : Profile
{
protected override void Configure()
{
Mapper.CreateMap<Contact, ReportRowModel>()
.ForMember(dest => dest.Gender, opt => opt.MapFrom(src => src.Gender.Name));
}
}
И код отображения выглядит так:
var contact = GetContactFor(clientPolicy);
Mapper.DynamicMap(contact, rowModel);
return rowModel;
Поля контакта заполняются правильно, за исключением поля rowModel.Gender
которое возвращает System.Data.Entity.DynamicProxies.Gender_3419AAE86B58120AA2983DA212CFFEC4E42296DA14DE0836B3E25D7C6252EF18
Я видел решения, в которых у людей возникли проблемы с использованием карты вместо DynamicMap, но я не нашел ничего, где сопоставляется отображение.ForMember.
Какие-либо предложения.
Ваш запрос EF не возвращает Пол, он возвращает прокси, который может получить Пол для вас при оценке, который не относится к типу, который AutoMapper построил для обработки.
Вам нужно либо охотно извлекать пол в вашем запросе, либо использовать метод AutoMapper IQueryable Extention Project, чтобы AutoMapper выдавал анонимный прогноз (опять же, в вашем запросе), вместо того, чтобы пытаться применить автоматическое сопоставление после того, как результат был возвращен из вашего контекста EF,
Это хорошая практика в целом, чтобы избежать выбора N + 1 вопросов.
У меня такая же проблема прямо сейчас с версией 4.x, вернувшись к 3.3.1, исправлена проблема.
DynamicMap
использует профили?