Можно ли игнорировать в зависимости от целевого значения?
Посмотри, что я хочу сделать:
object c;
var key = ce.CreateEntityKey<CustomerDataContract, Customer>("FullCustomerSet", item, o => o.ID);
if (ce.TryGetObjectByKey(key, out c))
{
Mapper.Map(item, (Customer)c);
}
else
{
c = Mapper.Map<CustomerDataContract, Customer>(item);
ce.AddObject("FullCustomerSet", c);
}
Игнорировать часть CreateEntityKey
- это просто создание EntityKey
иди, чтобы получить предмет из EDM. ce
имеет тип ObjectContext
.
Что я хочу сделать, это попытаться получить объект из EDM, обновить его с помощью AutoMapper или, если его там нет, создать его с помощью AutoMapper.
Проблема в том, что AutoMapper отображает все свойства - даже первичные ключи, которые не могут быть изменены edm, и я получаю неприятное исключение. Я могу игнорировать PK в CreateMap
, но тогда я не смогу выполнить 2-ю часть с созданием. Я получаю ПК из других мест ...
Одна вещь, которую я могу рассмотреть, - это что-то в CreateMap
- некоторое условное игнорирование целевого объекта или фактически используемого метода.
Другой - применить некоторые игнорирующие свойства в методе Mapper.Map
или вручную сопоставить их так:
var map = Mapper.FindTypeMapFor<TSource, TDestination>();
foreach (var item in map.GetPropertyMaps().OrderBy(o=>o.GetMappingOrder()))
{
if (ignore.Contains(item.DestinationProperty.Name))
{
continue;
}
//and now I should do some mapping, but don't know how...
}
Вопрос прост: как я могу это сделать? :)