我一直在玩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>
}
}
答案 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
}
}