1

我一直在使用 MVC 中的实体框架,但我似乎遇到了关于“延迟加载”的问题。我有一个简单的 Web 应用程序,它从著名的电影数据库中抓取数据,并允许用户将这些数据保存到数据库中。我有一个 Film 类,其中包含标题、发布日期、导演等详细信息。我还有一个 Genre 类,并且我在 Film 类中有一个流派的集合。

我遇到的问题是,当我想将 IEnumerable 查询传递给视图时,我似乎无法加载流派信息。

这是电影课:

 public class Film
{
    [Key]
    public int FilmId { get; set; }
    public string FilmTitle { get; set; }
    public int FilmReleaseYear { get; set; }
    public string FilmDirector { get; set; }
    public string FilmRating { get; set; }
    public string FilmImageUrl { get; set; }
    public string FilmImdbUrl { get; set; }
    public virtual ICollection<Genre> FilmGenres { get; set; }
    public virtual ICollection<FilmCastMember> FilmCastList { get; set; }
    public virtual ICollection<FilmReview> FilmReviews { get; set; }

    public Film()
    {
        FilmGenres = new List<Genre>();
        FilmCastList = new List<FilmCastMember>();
        FilmReviews = new List<FilmReview>();
    }
}

这是我的流派课程:

public class Genre
{   
    [Key]
    public int GenreId { get; set; }
    public string GenreType { get; set; }
}

这是我的操作方法

public ActionResult MyFilms()
    {
        IEnumerable<Film> films = from film in db.Films.Include("Genres")
                                  select film;

        return View(films);
    }

我遇到的问题是,当我在此方法的视图中时,我尝试使用 foreach 循环访问电影的 GenreType,但是,它没有给我那个选项。所有数据都链接在我的数据库中,所以我不确定我做错了什么。任何帮助都会很棒。

新动作方法:

public ActionResult MyFilms()
    {
        IEnumerable<Film> films = from film in db.Films.Include("FilmReviews").Include("FilmGenres").Include("FilmCastList")
                                  select film;

        return View(films);
    }

该方法的新视图:

 @model IEnumerable<MvcFilmFinder.Models.Film>

 @{
     ViewBag.Title = "MyFilms";
  }

  @foreach (var film in Model)
  {
      <h2>@film.FilmTitle</h2>
      <img src="@film.FilmImageUrl" alt="@film.FilmTitle" />

      foreach (var genre in film.FilmGenres)
      {
         <p>@genre.GenreType</p>
      }

      foreach (var genre in film.FilmGenres)
      {
         <p>@genre.GenreId</p>
      }

      foreach (var review in film.FilmReviews)
      {
         <p>@review.ReviewAuthor</p>
      }
  }
4

1 回答 1

1

将您的控制器代码更改为:

public ActionResult MyFilms()
{
    var films = from film in db.Films.Include("FilmGenres")
                select film;

    return View(films);
}

您的视图应如下所示:

@model IEnumerable<projectname.Models.Film>

@foreach (var film in Model)
{
    foreach (var genre in film)
    {
        // genre stuff
    }
}
于 2013-04-13T23:40:28.627 回答