【发布时间】: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 => 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