如何使用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)
这个页面有一些很好的例子