【问题标题】:How to return an article together with the related tags如何将文章连同相关标签一起返回
【发布时间】:2018-09-12 10:31:17
【问题描述】:

我有三个表:Articles、Tags 和 ArticleTag。 Article 模型与 Tag 模型之间存在多对多关系,ArticleTag 作为它们的联合。 这是模型:

public class Article
{
    ... 

    public ICollection<ArticleTag> ArticleTags { get; set; }
}

public class Tag
{
    ... 

    public ICollection<ArticleTag> ArticleTags { get; set; }
}

public class ArticleTag
{
    public int ArticleId { get; set; }
    public Article Article { get; set; }

    public int TagId { get; set; }
    public Tag Tag { get; set; }
}

这是获取文章的方式:

public Article GetArticleById(int id)
{
    return _appContext.Articles
        .Include(a => a.ArticleTags).ThenInclude(at => at.Tag)
        .FirstOrDefault(a => a.Id == id);
}

视图模型:

public class ArticleViewModel
{
    ...

    public ICollection<TagViewModel> Tags { get; set; }
}

这是控制器:

[HttpGet("{id:int}")]
public IActionResult Get(int id)
{
    var article = _unitOfWork.Articles.GetArticleById(id);

    return Ok(Mapper.Map<ArticleViewModel>(article));
}

API 请求返回文章但不包含标签。

【问题讨论】:

  • 使用include 包含tag
  • 这似乎无效:article + article.ArticleTags.Select(at =&gt; at.Tag)。这里有错别字吗?
  • Mapper 是否配置为将 ArticleTag 映射到 TagViewModel?
  • 我想@AmanB 在这里是正确的。在您的视图模型中,您有一个TagViewModels 的集合,但在您的实体中,您有一个ArticleTags 的集合,每个集合都有一个Tag 实例。您需要确保正确设置映射,以便将每个 ArticleTag 实例的 Tag 的值映射到 TagViewModel
  • 你是如何配置Mapper的?检查您是否获得了 var article = _unitOfWork.Articles.GetArticleById(id); 的预期值。

标签: c# asp.net-web-api asp.net-core


【解决方案1】:

尝试下面的代码来配置Mapper

  1. 标签视图模型

    public class TagViewModel
    {
        public int Id { get; set; }
        public string TagName { get; set; }
    
    }
    
  2. AutoMapperProfile

    public class AutoMapperProfile : Profile
    {
       public AutoMapperProfile()
       {
          CreateMap<Article, ArticleViewModel>()
              .ForMember(dest => dest.Tags, opt => opt.MapFrom(src => src.ArticleTags.Select(at => at.Tag)));
          CreateMap<Tag, TagViewModel>();
       }
    }
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 2016-09-14
    • 2014-01-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多