无法在MVC中延迟加载我的相关数据

时间:2013-04-13 22:14:26

标签: c# entity-framework asp.net-mvc-4

我一直在玩MVC中的实体框架,但我似乎遇到了关于'延迟加载'的问题。我有一个简单的Web应用程序,它从一个众所周知的电影数据库中删除数据,并允许用户将这些数据保存到数据库中。我有一个电影课,其中包含标题,发行日期,导演....等等。我也有一个类型课程,我在电影课程中有一个类型的图像。

我遇到的问题是,当我想将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>
      }
  }

1 个答案:

答案 0 :(得分: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
    }
}