Estoy usando Automapper y tengo el siguiente escenario: Class OrderModel tiene una propiedad llamada 'ProductName' que no está en la base de datos. Entonces, cuando trato de hacer el mapeo con:
Mapper.CreateMap<OrderModel, Orders>();Genera una excepción:
"Las siguientes 1 propiedades en Project.ViewModels.OrderModel no están asignadas: 'ProductName'
He leído en AutoMapper's Wiki for Projections el caso contrario (el atributo adicional está en el destino, no en la fuente, que en realidad es mi caso)
¿Cómo puedo evitar que automapper haga el mapeo de esta propiedad?
De Jimmy Bogard: CreateMap<Foo, Bar>().ForMember(x => x.Blarg, opt => opt.Ignore());
Está en uno de los comentarios de su blog .
ACTUALIZAR ( del comentario de Jamie del 4 de enero de 2019 a las 11:11 :)
Ignorar se reemplazó con DoNotValidate en ForSourceMember: https://github.com/AutoMapper/AutoMapper/blob/master/docs/8.0-Upgrade-Guide.md
Soy quizás un poco perfeccionista; Realmente no me gusta la ForMember(..., x => x.Ignore()) . Es una pequeña cosa, pero me importa. Escribí este método de extensión para hacerlo un poco más agradable:
public static IMappingExpression<TSource, TDestination> Ignore<TSource, TDestination>( this IMappingExpression<TSource, TDestination> map, Expression<Func<TDestination, object>> selector) { map.ForMember(selector, config => config.Ignore()); return map; }Se puede usar así:
Mapper.CreateMap<JsonRecord, DatabaseRecord>() .Ignore(record => record.Field) .Ignore(record => record.AnotherField) .Ignore(record => record.Etc); También podría reescribirlo para que funcione con params , pero no me gusta el aspecto de un método con un montón de lambdas.
Puedes hacerlo:
conf.CreateMap<SourceType, DestinationType>() .ForSourceMember(x => x.SourceProperty, y => y.Ignore());O, en la última versión de Automapper, simplemente quiere decirle a Automapper que no valide el campo
conf.CreateMap<SourceType, DestinationType>() .ForSourceMember(x => x.SourceProperty, y => y.DoNotValidate());