Automapper, MapFrom и EF динамические прокси

1

Я пытаюсь сопоставить объекты моего домена с моделью представления отчета. Все хорошо работало в тестировании, где я подделывал код структуры сущности и использовал построитель для возврата полностью заполненного объекта 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.

Какие-либо предложения.

  • 0
    DynamicMap использует профили?
  • 0
    Я новичок в Automapper, поэтому я не уверен. Я думаю, это так, как и остальные свойства в контакте заполнить, как ожидалось
Показать ещё 5 комментариев
Теги:
entity-framework
automapper

2 ответа

7
Лучший ответ

Ваш запрос EF не возвращает Пол, он возвращает прокси, который может получить Пол для вас при оценке, который не относится к типу, который AutoMapper построил для обработки.

Вам нужно либо охотно извлекать пол в вашем запросе, либо использовать метод AutoMapper IQueryable Extention Project, чтобы AutoMapper выдавал анонимный прогноз (опять же, в вашем запросе), вместо того, чтобы пытаться применить автоматическое сопоставление после того, как результат был возвращен из вашего контекста EF,

Это хорошая практика в целом, чтобы избежать выбора N + 1 вопросов.

  • 2
    Спасибо за совет. Я принял это как ответ, но в итоге это оказалось простой ошибкой от моего имени. Я создал метод Bootstrap с AutoMapperConfigurator.Configure () в нем и просто забыл вызвать метод в моем коде. :(
  • 0
    Ах. Это тоже сделало бы это. Вообще Automapper отлично справляется с дочерними классами, я подумал, что в вашем коде есть что-то, препятствующее этому. В любом случае, лучше отобразить в вашем методе запроса и вернуть нужный тип, а не на классы, возвращенные из вашего метода запроса.
1

У меня такая же проблема прямо сейчас с версией 4.x, вернувшись к 3.3.1, исправлена проблема.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню