2015-02-19 2 views
0

Я создал карту, однако .. некоторые из свойств источника будут время от времени выдавать исключение (не спрашивайте меня, почему кто-то решил сделать исключения «get» throw, если его null..but well ..) Это приводит к некоторым проблемам, когда AutoMapper пытается сопоставить свойства, есть ли в любом случае попробовать и поймать исключение в сопоставлении, и если он войдет в кеш, просто присвойте значение по умолчанию назначению -имущество?AutoMapper, попробуйте уловить сопоставление

Br, Inx

ответ

1

Рассматривали ли вы

Automapper.Mapper.CreateMap<Source,Dest>().BeforeMap(Action<Source, Dest> beforeMapAction)` 

?

От https://github.com/AutoMapper/AutoMapper/wiki/Before-and-after-map-actions

Иногда вам может понадобиться, чтобы выполнить собственную логику до или после того, как карта происходит. Это должно быть редкостью, поскольку более очевидно, что это делается за пределами AutoMapper. Вы можете создавать глобальное до/после действия карты:

Mapper.CreateMap<Source, Dest>() 
.BeforeMap((src, dest) => src.Value = src.Value + 10) 
.AfterMap((src, dest) => dest.Name = "John"); 

Или вы можете создать до/после карты обратных вызовов во время отображения:

int i = 10; 
Mapper.Map<Source, Dest>(src, opt => { 
opt.BeforeMap((src, dest) => src.Value = src.Value + i); 
opt.AfterMap((src, dest) => dest.Name = HttpContext.Current.Identity.Name); 
}); 

Последняя конфигурация полезна, когда вам нужна контекстная информация, поступающей в до/после действий карты.

Прежде всего, вы должны добавить свое свойство в список игнорирования и после этого использовать перед картой.

AutoMapper.Mapper.CreateMap<Source,Dest>(). 
ForMember((src => src.PropertyWithException), opt => opt.Ignore()). 
BeforeMap((src,dest)=> 
{ 
    try 
    { 
     dest.PropertyWithException = src.PropertyWithException; 
    } 
    catch 
    { 
     dest.PropertyWithException = some_default_value; 
    } 
}); 
+0

Хм .. Я не совсем уверены в том, как использовать это .. Вы имеете в виду, что я мог бы установить значение свойств Thats в настоящее время бросает исключение значения по умолчанию с действием в .BeforeMap-методе .. а потом просто цепляйте кучу ForMember после этого, как обычно? – Inx51

+0

@ Inx51 да, я обновил свой ответ. –

Смежные вопросы