Посмотреть детали товара во многих отношениях многие - PullRequest
0 голосов
/ 30 октября 2019

ребята. Что мне нужно, так это просто просмотреть подробную информацию о моей статье в моем 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; }
}

Мой 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();
    }

1 Ответ

0 голосов
/ 30 октября 2019

Что вам нужно сделать, это попросить 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);

Вы можете прочитатьо Загрузка связанных данных здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...