我正在尝试设置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)
请查看文档的相关部分以获取更多详细信息和其他映射方案.
Nel*_*ius 17
最后,我认为这与ReSharper有些不相容.
ReSharper似乎导致Automapper代码显示不正确,但工作正常(即使它显示带有错误消息的红色).卸载ReSharper完全解决了这个问题.
示例实现如下:
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)
| 归档时间: |
|
| 查看次数: |
74567 次 |
| 最近记录: |