Automapper - игнорирование при отображении - PullRequest
0 голосов
/ 20 апреля 2010

Можно ли игнорировать в зависимости от целевого значения?

Посмотри, что я хочу сделать:

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...
}

Вопрос прост: как я могу это сделать? :)

1 Ответ

1 голос
/ 20 апреля 2010

Как насчет игнорирования PK, а затем просто сделать c.YourPK = somevalue во второй части?

...