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'
Leí en el Wiki de AutoMapper para proyecciones el caso opuesto (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?
Respuestas:
De Jimmy Bogard:
CreateMap<Foo, Bar>().ForMember(x => x.Blarg, opt => opt.Ignore());
Está en uno de los comentarios en su blog .
fuente
CreateMap<Foo, Bar>().ForSourceMember(x => x.Blarg, opt => opt.Ignore());
podría ser útilCreateMap<SourceType, DestType> (MemberList.Source).ForSourceMember(x => x.MySourceProperty, opt => opt.DoNotValidate())
:?Ignore()
sigue siendo la sintaxis correcta. Esto se debe a que el cambio de sintaxisIgnore
se realizó en laISourceMemberConfigurationExpression
interfaz pero no en laIMemberConfigurationExpression`3
interfaz disjunta .Tal vez soy un poco perfeccionista; Realmente no me gusta la sintaxis 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:
Se puede usar así:
También podría reescribirlo para trabajar
params
, pero no me gusta la apariencia de un método con muchas lambdas.fuente
params
: podría devolver una serie de selectores desde el interior de una sola lambda, luego asignar sobre cada selector conforeach
oSelect()
tal vez no menos desordenado.Puedes hacerlo:
fuente
Solo para cualquiera que intente hacer esto automáticamente, puede usar ese método de extensión para ignorar las propiedades no existentes en el tipo de destino:
Para ser utilizado de la siguiente manera:
gracias a Can Gencer por el consejo :)
fuente: http://cangencer.wordpress.com/2011/06/08/auto-ignore-non-existing-properties-with-automapper/
fuente
'Mapper' does not contain a definition for 'GetAllTypeMaps' [DSSTools]
..Mapper.Configuration.GetAllTypeMaps()
sourceAhora hay (AutoMapper 2.0) un
IgnoreMap
atributo, que voy a usar en lugar de la sintaxis fluida, que es un poco pesado en mi humilde opinión.fuente
IgnoreMapAttribute
.Al asignar un modelo de vista de nuevo a un modelo de dominio, puede ser mucho más limpio simplemente validar la lista de miembros de origen en lugar de la lista de miembros de destino
Ahora mi validación de mapeo no falla, requiriendo otra
Ignore()
, cada vez que agrego una propiedad a mi clase de dominio.fuente
Podría usar IgnoreAttribute en la propiedad que debe ignorarse
fuente
[IgnoreMap]
deIgnoreMapAttribute
Hola a todos Por favor, use esto, está funcionando bien ... para el mapeador automático use múltiples .ForMember en C #
fuente