伙计们。我需要的只是在“查看ArticleDetail”中查看有关我的Article的详细信息。一切正常,除了标签。我的文章和标签之间有多对多的关系:
public class Article
{
public int Id {get; set; }
public string Name { get; set; }
public string ShortDescription { get; set; }
public string Description { get; set; }
public byte[] HeroImage { get; set; }
public DateTime Date { get; set; }
public string Category { get; set; }
public virtual List<ArticleTag> ArticlesTags { get; set; }
public Article()
{
ArticlesTags = new List<ArticleTag>();
}
}
public class Tag
{
public int Id { get; set; }
public string Name { get; set; }
public virtual List<ArticleTag> ArticlesTags { get; set; }
public Tag()
{
ArticlesTags = new List<ArticleTag>();
}
}
public class ArticleTag
{
public int ArticleId { get; set; }
public Article Article { get; set; }
public int TagId { get; set; }
public Tag Tag { get; set; }
}
我的ArticleDetail是:
@model MyBlog.Models.Article
@{
ViewData["Title"] = "Article Detail";
}
<div>
<dl class="dl-horizontal">
<dt></dt>
<dd>
@Html.DisplayFor(model => model.Name)
</dd>
<dt></dt>
<dd>
@Html.DisplayFor(model => model.Description)
</dd>
<dt></dt>
<dd>
@foreach (var t in Model.ArticlesTags)
{@t.Tag.Name} //?? is it right?
</dd>
<dt></dt>
<dd>
@Html.DisplayFor(model => model.Category)
</dd>
</dl>
</div>
但是我应该如何更改HomeController(现在我只有一个用于查看有关文章的详细信息而没有任何标签)?
[HttpGet]
[ActionName("ArticleDetail")]
public async Task<IActionResult> ArticleDetail(int? id)
{
if (id != null)
{
Article article = await db.Articles.FirstOrDefaultAsync(i => i.Id == id);
if (article != null)
return View(article);
}
return NotFound();
}
答案 0 :(得分:0)
您需要做的就是要求EF将ArticleTags
与Article
一起获得。
幸运的是,您可以使用实体模型中的导航属性通过使用Include
和ThenInclude
方法来加载ArticleTags
来加载想要的相关数据,然后再加载Tags
位于文章标签内。
例如:
Article article = await db.Articles.Include(a => a.ArticlesTags).ThenInclude(at => at.Tag).FirstOrDefaultAsync(i => i.Id == id);
您可以阅读有关Loading Related Data here
的信息