如何使用AutoMapper .ForMember?

Nel*_*ius 78 .net automapper

我正在尝试设置AutoMapper以从实体转换为DTO.我知道我应该使用.ForMember()Mapper.CreateMap<Entity, DTO>()设置自定义映射,但是这似乎并没有成为一个有效的方法.

编辑以供澄清:我不是要查找我已阅读的文档的链接,或者是基本语法的解释.我正在使用答案和文档中描述的正确语法,例如:

Mapper.CreateMap<EFAddress, Address>()
      .ForMember(dest => dest.Code, opt => opt.MapFrom(src => src.Name));
Run Code Online (Sandbox Code Playgroud)

如果我在CreateMap <>中有一个无效的类型名称,我可以看到"ForMember"作为一个有效的方法,鼠标悬停显示方法签名,正如我通常所期望的那样.但是,只要我给它两个有效类型,ForMember说它无法解析符号,就好像该方法不可用一样.

对于我没有遇到的泛型类,是否存在某种约束?

谢谢

Dar*_*rov 118

请尝试以下语法:

Mapper
    .CreateMap<Entity, EntityDto>()
    .ForMember(
        dest => dest.SomeDestinationProperty,
        opt => opt.MapFrom(src => src.SomeSourceProperty)
    );
Run Code Online (Sandbox Code Playgroud)

或者,如果源和目标属性具有相同的名称,则:

Mapper.CreateMap<Entity, EntityDto>();
Run Code Online (Sandbox Code Playgroud)

请查看文档的相关部分以获取更多详细信息和其他映射方案.

  • 愚蠢的问题,选择意味着什么? (4认同)

Nel*_*ius 17

最后,我认为这与ReSharper有些不相容.

ReSharper似乎导致Automapper代码显示不正确,但工作正常(即使它显示带有错误消息的红色).卸载ReSharper完全解决了这个问题.

  • 因为它没有回答我问的问题.我的问题是关于在使用正确的语法并正确引用所有内容时,在visual studio中看不出来的方法.这结果是与resharper相关的错误.另一个答案确实回答了一个与我提出的问题非常相似的问题,但这对我实际问过的答案来说是完全错误的答案. (4认同)
  • 什么版本的ReSharper?什么版本的AutoMapper? (2认同)
  • 我认为这个问题会影响 VisualStudio 2010 中的 AutoMapper 和 ReSharper 8.x。请参阅 https://github.com/AutoMapper/AutoMapper/issues/381 (2认同)

sta*_*k72 8

示例实现如下:

Mapper.CreateMap<Game, GameViewModel>()
  .ForMember(m => m.GameType, opt => opt.MapFrom(src => src.Type))
Run Code Online (Sandbox Code Playgroud)

我们需要映射这个属性,因为Game和GameViewModel的属性名称是不同的 - 如果它们是相同的且属于同一类型,那么它将不需要ForMember

ForMember的另一个用途是忽略映射

Mapper.CreateMap<Game, GameViewModel>()
    .ForMember(dest => dest.Prize, opt => opt.Ignore());
Run Code Online (Sandbox Code Playgroud)