Issue Parece que la condición se ignora. Aquí está mi escenario:La condición de Automapper se ignora
class Fuente
public class Source
{
public IEnumerable<Enum1> Prop1{ get; set; }
public IEnumerable<Enum2> Prop2{ get; set; }
public IEnumerable<Enum3> Prop3{ get; set; }
}
El enumeraciones subclase de un byte y están decoradas con [Banderas]. La clase de destino simplemente contiene propiedades como Enum1, Enum2 y Enum3 que contienen el valor bitotal "total". Entonces, en esencia, si la Enumeración contiene Enum1.value !, Enum1.Value2 y Enum1.Value3, el destino contendrá el valor en bits de Enum1.Value1 | Enum1.Value2 | Enum1.Value3
clase de destino
public Enum1 Prop1 { get; set; }
public Enum2 Prop2 { get; set; }
public Enum3 Prop3 { get; set; }
Mapeo AutoMapper
Mapper.CreateMap<Source, Destination>()
.ForMember(m => m.Prop1, o =>
{
o.Condition(c => !c.IsSourceValueNull);
o.MapFrom(f => f.Prop1.Aggregate((current, next) => current | next));
})
.ForMember(m => m.Prop2, o =>
{
o.Condition(c => !c.IsSourceValueNull);
o.MapFrom(f => f.Prop2.Aggregate((current, next) => current | next));
})
.ForMember(m => m.Prop3, o =>
{
o.Condition(c => !c.IsSourceValueNull);
o.MapFrom(f => f.Prop3.Aggregate((current, next) => current | next));
});
El mapeo funciona bien cuando las propiedades internas no son nulas y asignación tiene éxito y los conjuntos de destino correctamente. Sin embargo, quiero omitir la asignación cuando el valor fuente del miembro es nulo (cuando Prop1 es nulo, luego omita la asignación).
Puedo ver por la depuración que Source.Prop1 es nulo. La condición se ignora por completo y obtiene la excepción que dice que el valor es nulo.
Trying to map Source to Destination. Destination property: Prop1. Exception of type 'AutoMapper.AutoMapperMappingException' was thrown. --> Value cannot be null. Parameter name: source
no estoy seguro de si la comprobación de IsSourceValueNull Prop1 o la Fuente de la clase real que no es nulo. Solo el miembro Prop1 es nulo.
Cualquier ayuda es apreciada.
Gracias Patrick. Obtengo la misma excepción exactamente al separar esto. – TimJohnson
Pensé que había hecho eso antes. Una cosa posible podría ser que c.IsSourceValueNull probablemente represente si el objeto de origen completo que se asignará es nulo. Me pregunto si debería ser "c => c.Prop1! = Null"? – PatrickSteele
No se pudo encontrar una muestra de código usando "Condición". Lo siento. Supongo que siempre se puede hacer: o.MapFrom (f => f.Prop1 == null? Null: f.Prop1.Aggregate (...)) – PatrickSteele