2016-08-18 3 views
0

У нас есть сложный объект User, который содержит кучу списков других объектов.Automapper не игнорирует свойства с ошибкой

User 
    List<User> Subordinates {get; set;} 
    etc.... 

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

В AutoMapper Я получаю сообщение об ошибке при попытке сопоставить класс пользователя с другим классом.

Таким образом, ошибка в свойстве Subordinates:

'((System.Data.Entity.DynamicProxies.User_26F7582000F06E0D5B307573194E69014E40D1C586E95D4E4932757C1F4DE360)((System.Data.Entity.DynamicProxies.WorkflowTask_DEDE69BC0D3CAFD0CCDA62406BC48A7A7CCBD5E8B13369FF5E761B64348A767C)thisTask).User).Subordinates' threw an exception of type 'System.ObjectDisposedException' 

И ошибка, которую бросает AutoMapper;

{"Error mapping types.\r\n\r\nMapping types:\r\nWorkflowTask -> jsonTask\r\nDataRepository.WorkflowTask -> Tasks.Models.jsonTask\r\n\r\nType Map configuration:\r\nWorkflowTask -> jsonTask\r\nDataRepository.WorkflowTask -> Tasks.Models.jsonTask\r\n\r\nProperty:\r\nUser"} 

И затем во внутреннем исключении;

{"Error mapping types.\r\n\r\nMapping types:\r\nUser -> jsonUser\r\nDataRepository.User -> Tasks.Models.jsonUser\r\n\r\nType Map configuration:\r\nUser -> jsonUser\r\nDataRepository.User -> Tasks.Models.jsonUser\r\n\r\nProperty:\r\nSubordinates"} 

Мне просто нужен AutoMapper, чтобы игнорировать те свойства, которые находятся в ошибке.

ответ

2

Основная причина данные ленивы загружаются в ваши сущности, как правило, внутри using(var context = new MyDbContext()) блока и AutoMapper пытается отобразить незагруженных свойства вне контекста блока, вызывает загрузку, поэтому System.ObjectDisposedException, так как контекст уже размещенный.

Что вам нужно сделать, это NOT, игнорируя свойства, которые не удалось загрузить, но убедитесь, что все свойства правильно загружены перед их сопоставлением. Я предлагаю вам прочитать this guidance, он показывает, как помещать контроллеры, сущности и dbcontext в правильные слои.

+0

Спасибо за это, и да, я пришел к такому же выводу. Проблема в том, что я не «нуждаюсь» в загрузке объектов, и я, конечно же, не хочу передавать все это обратно в представление. Я просто хочу передать то, что нужно, и в этом случае Subordinates не требуется для представления. Просто пытаюсь уменьшить количество, которое возвращается. Спасибо за ссылку, я также дам это прочитать. – griegs

+0

@griegs Если свойства не нужны в представлении, вы должны удалить их из соответствующей модели представления. Если одно представление нуждается в них, а другое - нет, вы должны создать разные модели представлений вместо совместного использования одной модели представления. –

+0

Да, хороший момент! Спасибо Дэнни, вот что я сделаю. Я шел по очень темному пути с этим и просто нуждался в ком-то, чтобы осветить эту глупость. Благодарю. +1 – griegs