Условие Automapper игнорируется

Проблема Похоже, что условие игнорируется. Вот мой сценарий:

Исходный класс

public class Source
{
    public IEnumerable<Enum1> Prop1{ get; set; }

    public IEnumerable<Enum2> Prop2{ get; set; }

    public IEnumerable<Enum3> Prop3{ get; set; }
}

Перечисления подкласса из байта и украшены [Флаги]. Класс назначения просто содержит такие свойства, как Enum1, Enum2 и Enum3, содержащие «общее» побитовое значение. Таким образом, по сути, если Enumeration содержит Enum1.value !, Enum1.Value2 и Enum1.Value3, пункт назначения будет содержать поразрядное значение Enum1.Value1 | Enum1.Value2 | Enum1.Value3

Класс назначения

    public Enum1 Prop1 { get; set; }

    public Enum2 Prop2 { get; set; }

    public Enum3 Prop3 { get; set; }

Отображение 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));
            });  

Отображение работает нормально, когда внутренние свойства не равны нулю, а сопоставление выполнено успешно и правильно устанавливает назначение. Однако я хочу пропустить сопоставление, когда значение источника элемента равно нулю (когда Prop1 имеет значение null, пропустите сопоставление).

Во время отладки я вижу, что Source.Prop1 имеет значение null. Условие полностью игнорируется и возникает исключение, в котором говорится, что значение равно нулю.

Trying to map Source to Destination. Destination property: Prop1. Exception of type 'AutoMapper.AutoMapperMappingException' was thrown. --> Value cannot be null. Parameter name: source

Я не уверен, проверяет ли IsSourceValueNull свойство Prop1 или фактический класс Source, который не является нулевым. Только член Prop1 имеет значение NULL.

Любая помощь приветствуется.

5
задан TimJohnson 4 November 2011 в 18:11
поделиться