www.ASP.net Web サイトから Mvc Music Store チュートリアルを実行しています。
Entity Framework がどのようにテーブルを作成したか、およびそれらのラムダ式がどのように機能するかを理解するのに問題があります。私は EF と Lambda の基本を知っており、このシリーズの以前のチュートリアルを行っています。
私の質問は、チュートリアルのパート 4 に関連しています:パート 4: モデルとデータ アクセス モデルに は、以下のように、アーティスト、ジャンル、およびアルバムの 3 つのクラスがあります。
public class Artist
{
public int ArtistId { get; set; }
public string Name { get; set; }
}
public partial class Genre
{
public int GenreId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public List<Album> Albums { get; set; }
}
public class Album
{
public int AlbumId { get; set;}
public int GenreId { get; set; }
public int ArtistId { get; set; }
public string Title { get; set; }
public decimal Price { get; set; }
public string AlbumArtUrl { get; set; }
public Genre Genre { get; set; }
public Artist Artist { get; set; }
}
ただし、EF によって作成された各テーブルの次の列のみが表示されました。
アーティスト表:ArtistId, Name
ジャンル表:GenreId, Name, Description
アルバム テーブル:AlbumId, GenreId, ArtistId, Title, Price, AlbumArtUrl
混乱 1
List<Album> Albums
アーティストテーブルは問題ありませんが、ジャンルテーブルにはクラス定義から何もありません。アルバム テーブルpublic Genre Genre
にあり、public Artist Artist
欠落しています。
以下は、SampleData.cs ファイルのデータベースに既定のデータを追加するステートメントです。
new Album
{
Title = "A Copland Celebration, Vol. I",
Genre = genres.Single(g => g.Name == "Classical"),
Price = 8.99M,
Artist = artists
.Single(a => a.Name == "Aaron Copland & London Symphony Orchestra"),
AlbumArtUrl = "/Content/Images/placeholder.gif"
}
質問
データベーステーブルにジャンルやアーティストなどの名前のフィールドがありませんか?? GenreId と ArtistId は挿入されませんが、データベースの Album テーブルにはこれらの値が取り込まれます。???
混乱 2
StoreControllerのBrowseアクションメソッドで、
// Retrieve Genre and its Associated Albums from database
var genreModel = storeDB.Genres.Include("Albums").Single(g => g.Name == genre);
ここでインクルードがどのように機能するかわかりません。Genres モデル クラスには List of Albums フィールドがありますが、データベースにはありません。include() がそこにアルバムのリストを保存する可能性があると推測できます。
質問
しかし、Include メソッドに「Albums」パラメーターがある理由がわかりません。DbContext
Albums の 2 つのリストがあり、1 つは Genre モデル クラスにあり、もう 1 つはEFの派生クラスにあります。このステートメントは、一致するジャンルのアルバムのみをどのように返しますか??
どんな助けでも大歓迎です。ありがとう