2010-03-15 11 views
27

¿Es posible ignorar la asignación de un miembro según el valor de una propiedad de origen?Automapper: Ignorar a condición de

Por ejemplo si tenemos:

public class Car 
{ 
public int Id { get; set; } 
public string Code { get; set; } 
} 

public class CarViewModel 
{ 
public int Id { get; set; } 
public string Code { get; set; } 
} 

estoy buscando algo como

Mapper.CreateMap<CarViewModel, Car>() 
.ForMember(dest => dest.Code, opt => opt.Ignore().If(source => source.Id == 0)) 

Hasta ahora, la única solución que tengo es demasiado utilizar dos modelos de vista diferentes y crear diferentes asignaciones para cada uno.

Respuesta

39

La función Ignorar() es estrictamente para los miembros que nunca se correlacionan, ya que estos miembros también se omiten en la validación de la configuración. Comprobé un par de opciones, pero no parece que un solucionador de valores personalizado haga el truco. En su lugar, Voy a mirar a la adición de una opción de configuración Saltar condicional, como:

Mapper.CreateMap<CarViewModel, Car>() 
.ForMember(dest => dest.Code, opt => opt.Condition(source => source.Id == 0)) 
+0

+1 para esta función :) –

+0

excelente. Muchas gracias. – Castrohenge

+1

¿Cuál es el estado de esta función? ¿Cuándo podemos esperarlo? – mare

4

me encontré con un problema similar, y si bien esto será sobrescribir el valor existente para dest.Code con nula, podría ser útil como punto de partida punto:

AutoMapper.Mapper.CreateMap().ForMember(dest => dest.Code,config => config.MapFrom(source => source.Id != 0 ? null : source.Code));

+0

Buena solución No me había visto a mí mismo, pero la forma de Jimmy es aún mejor. – alehro