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>
}
}