Построение таблицы содержания вложенные модели MVC

Дано оглавление, которое будет содержать:

Категории,
Разделы,
Темы,

Я создал следующие 3 модели:

public class Category
{
    public int id { get; set; }
    public string name { get; set; }
    public ICollection<Section> Sections { get; set; }
}
public class Section
{
    public int id { get; set; }
    public string name { get; set; }
    public int CategoryId { get; set; }
    public ICollection<Topic> Topics { get; set; }
}
public class Topic
{
    public int id { get; set; }
    public string name { get; set; }
    public int SectionId { get; set; }
}

В SQL Mgmt Studio я создал отношения «один ко многим» между 3 таблицами. My Controller ActionResult выглядит следующим образом:

public ActionResult Index()
{
    return View(_db.Categories.ToList());
}

Тогда мой взгляд:

@model IEnumerable<Models.Category>

<h2>Table of Contents</h2>

<ul>
@foreach (var item in Model)
{
    <li>@Html.DisplayFor(model => item.name)
        @if (item.Sections != null)
        {
            <ul>
            @foreach (var sec in item.Sections)
            {
                <li>@Html.DisplayFor(model => sec.name)
                    @if (sec.Topics != null)
                    {
                        <ul>
                        @foreach (var topic in sec.Topics)
                        {
                            <li>@Html.DisplayFor(model => topic.name)</li>
                        }
                        </ul>
                    }
                </li>
            }
            </ul>   
        }
    </li>
}
</ul>

Я получаю данные только из таблицы категорий. Таким образом, он правильно захватывает данные категории и строит внешний список, но не заполняет связанные разделы и темы в модели. Что я делаю не так?

Попыталась реализовать ответ на предложение Дэвида Клафа в комментариях ниже. После ссылки на систему.Данные.Entity in my Controller, версия лямбда-выражения смогла скомпилироваться и запустить, но она создает ошибку в цикле foreach, пытаясь получить доступ к модели. Ошибка в InnerException: «недопустимое имя столбца ‘Section_id’.rnInvalid имя столбца ‘Category_id’.rnInvalid имя столбца ‘Section_id’.»

Вот изменение, которое я внес в контроллер:

public ActionResult Index()
{
    var TOC = _db.Categories.Include(c => c.Sections.Select(s => s.Topics));
    return View(TOC);
}

1 ответ

  1. Я не понял, как использовать вложенную модель в том виде, в каком она у меня была. Вместо этого я использую частичные представления, и это, кажется, работает хорошо