简体   繁体   中英

AutoMapper conditional Guid mapping causing exception

I have the following mapping:

Mapper.Initialize(cfg => cfg.CreateMap<StructureDTO, Structure>()
  .ForMember(dest => dest.ParentId, 
     opt => opt.MapFrom(src => src.ParentStructureId != Guid.Empty ? src.ParentStructureId : (Guid?)null)))

dest.ParentId is nullable Guid  
src.ParentStructureId is Guid 


I get the following exception:

An exception of type 'System.InvalidOperationException' occurred in System.Core.dll but was not handled in user code

Additional information: The operands for operator 'NotEqual' do not match the parameters of method 'op_Inequality' .

Is this because I'm trying to map two different types? I'm at a loss here.

Automapper version is 5.0.2

make a method which does the work for you, then use the method in the ForMember method:

private Guid? Transform(StructureDTO src) {
    return src.ParentStructureId != Guid.Empty ? src.ParentStructureId : (Guid?) null;
}

then do your mapping this way:

Mapper.Initialize(cfg => cfg.CreateMap<StructureDTO, Structure>()
    .ForMember(dest => dest.ParentId,
        opt => opt.MapFrom(src => Transform(src))));

This is an error of AutoMapper's expression building logic, it tries to convert your lambda into a .NET expression tree , to bypass this we fore it to make a MethodCallExpression . This calls your new method directly without converting it into expressions.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM