如何使用AutoMapper .ForMember?

我试图设置AutoMapper从实体转换到DTO。 我知道我应该在Mapper.CreateMap<Entity, DTO>() .ForMember()之后使用.ForMember()来设置自定义映射,但是这似乎不是一种可用的方法。

编辑澄清:我没有find一个链接到我已阅读的文档,或基本语法的解释。 我正在使用答案和文档中描述的正确语法,例如:

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

如果我在CreateMap <>中有一个无效的types名称,我可以看到“ForMember”作为一个有效的方法,鼠标hover显示方法签名,我通常会期望。 但是,只要我给它两个有效的types,ForMember说它不能parsing符号,就好像该方法不可用。

对于我不会遇到的generics类有什么限制吗?

谢谢

尝试以下语法:

 Mapper .CreateMap<Entity, EntityDto>() .ForMember( dest => dest.SomeDestinationProperty, opt => opt.MapFrom(src => src.SomeSourceProperty) ); 

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

 Mapper.CreateMap<Entity, EntityDto>(); 

请检查文档的相关部分以获取更多详细信息和其他映射scheme。

最后,我认为这与ReSharper是不相容的。

ReSharper似乎已经导致Automapper代码显示不正确,但工作得很好(即使它显示红色的错误信息)。 卸载ReSharper完全解决了这个问题。

一个示例实现如下:

 Mapper.CreateMap<Game, GameViewModel>() .ForMember(m => m.GameType, opt => opt.MapFrom(src => src.Type)) 

我们需要映射这个属性,因为Game和GameViewModel属性的名称是不同的 – 如果它们是相同的并且是相同types的,那么它不需要ForMember

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

 Mapper.CreateMap<Game, GameViewModel>() .ForMember(dest => dest.Prize, opt => opt.Ignore()); 

你是这样做的吗

 Mapper.CreateMap<SourceType,DestinationType>().ForMember(What ever mapping in here) 

这个页面有一些很好的例子