AutoMapper条件Guid映射导致异常

时间:2016-08-09 20:35:45

标签: c# automapper

我有以下映射:

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 


我得到以下异常:

'System.InvalidOperationException'中出现System.Core.dll类型的例外但未在用户代码中处理

其他信息:运算符'NotEqual'的操作数与方法'op_Inequality'的参数不匹配。

这是因为我试图映射两种不同的类型吗?我在这里不知所措。

Automapper版本为5.0.2

1 个答案:

答案 0 :(得分:1)

制作一个为您完成工作的方法,然后使用ForMember方法中的方法:

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

然后以这种方式进行映射:

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

这是AutoMapper的表达式构建逻辑的一个错误,它试图将你的lambda转换为.NET expression tree,绕过它我们将它作为MethodCallExpression。这会直接调用您的新方法,而不会将其转换为表达式。