c# - 如何在这种情况下使用 c# AutoMapper 映射对象
问题描述
这是我要映射的源对象
public class Post
{
public string PostId { get; set; }
public string PostTitle { get; set; }
public virtual List<Comment> Comments { get; set; }
}
这个目标对象我想将源映射到
public class PostResponse
{
public int PostId { get; set; }
public string PostTitle { get; set; }
public IEnumerable<CommentObj> Comments { get; set; }
}
这是控制器抛出错误 AutoMapper.AutoMapperMappingException:错误映射类型。
[HttpGet(ApiRoutes.Posts.GetAll)]
public async Task<IActionResult> GetAll()
{
var posts = await _postServices.GetPostsAsync();
return Ok(_mapper.Map<List<PostResponse>>(posts));
}
这是服务
public async Task<List<Post>> GetPostsAsync()
{
var queryable = _dataContext.Posts.AsQueryable();
var psts = await queryable.Include(x => x.Comments).ToListAsync();
return psts;
}
这是映射配置文件
public DomainResponseProfile()
{
CreateMap<Post, PostResponse>().
ForMember(dest => dest.Comments, opt => opt.MapFrom(src => src.Comments.Select(x => new CommentResponse
{ PostId = x.PostId, DateCommented = x.DateCommented })));
}
这是域注释对象
public class Comment
{
public int CommentId { get; set; }
public int PostId { get; set; }
}
这是响应评论对象
public class CommentResponse
{
public int CommentId { get; set; }
public List<CommentObj> Comments { get; set; }
}
解决方案
我才发现我做错了什么。
wrong
CreateMap<Post, PostResponse>().
ForMember(dest => dest.Comments, opt => opt.MapFrom(src => src.Comments.Select(x => new CommentResponse
{ PostId = x.PostId, DateCommented = x.DateCommented })));
正确的
CreateMap<Post, PostResponse>().
ForMember(dest => dest.Comments, opt => opt.MapFrom(src =>
src.Comments));
推荐阅读
- bash - Bash:用空行分隔文件并分配给列表
- if-statement - 无法关闭 div
- reactjs - 从firebase异步获取数据并在到达数据后设置状态
- r - 有限数量的 NA 的插值
- ios - iOS objective-c 对象:何时使用 release 何时不使用
- r - R中的乘法
- vb.net - 如何在表单之间共享事件
- ios - viewServiceDidTerminateWithError:: 错误域=_UIViewServiceInterfaceErrorDomain Code=3 "(null)" UserInfo={Message=服务连接中断
- jenkins - 仅当之前的工作在管道中失败时如何构建工作?
- angular - 如何使用 ng bootstrap & angular 6 以编程方式设置自定义日期?