Как мне сопоставить объекты в этом сценарии, используя c# AutoMapper - PullRequest
1 голос
/ 05 февраля 2020

Это исходный объект, который я хочу отобразить

 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; }
}

1 Ответ

0 голосов
/ 06 февраля 2020

Я только что узнал, что я сделал не так.

 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));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...