【问题标题】:View details of item in many to many relationship在多对多关系中查看项目的详细信息
【发布时间】:2020-02-26 01:06:02
【问题描述】:

伙计们。我需要的只是在我的 View ArticleDetail 中查看有关我的文章的详细信息。除标签外,一切正常。我在文章和标签之间有多对多的关系:

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

我的文章详情是:

    @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();
    }

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-core entity-framework-core


    【解决方案1】:

    您需要做的是让 EF 获取 ArticleTags 以及 Article

    幸运的是,您可以使用实体模型中的导航属性来加载所需的相关数据,使用IncludeThenInclude 方法加载ArticleTags,然后在文章中加载Tags标签。

    例如:

    Article article = await db.Articles.Include(a => a.ArticlesTags).ThenInclude(at => at.Tag).FirstOrDefaultAsync(i => i.Id == id);
    

    你可以阅读Loading Related Data here

    【讨论】:

      猜你喜欢
      • 2020-10-15
      • 2013-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多