プロパティ名とクラス名を変更して、もう少し読みやすくします。Genreテーブルの主キー列の名前を のままにしておくとGenreId、EF Codefirst は外部キー (ムービー内) テーブルを名前Genre_GenreId!! で作成します。そこで、 Movie クラスの主キー列名を単にIDに変更して、外部キー列を次のように生成するようにしましたGenre_ID
public class Movie
{
public int ID { get; set; }
public String MovieName { get; set; }
public virtual Genre Genres { get; set; }
}
public class Genre
{
public int ID { get; set; }
public String Name { get; set; }
}
UI で、AvailableGenreレコードを一覧表示するドロップダウンを提供します。ユーザーがフォームを送信したら、このように保存します
using (YourDBContext dbContext = new YourDBContext())
{
Movie movie= new Movie { MovieName = "Read it from UI Please" };
var genr=dbContext.Find(2);
// TO DO : replace 2 by selected value from dropdown in the UI
movie.Genres =genr;
dbContext.Movies.Add(movie);
dbContext.SaveChanges();
}
最初に db コンテキストから Genre オブジェクトをロードし、それをGenres新しい映画オブジェクトのプロパティとして設定します。このメソッドを使用して、Find主キーがその関数に渡される値 (この場合は 2) である項目を見つけます。Genre テーブルに ID を持つレコードがあると仮定すると、これにより新しいレコードが movie テーブルに追加GenreIDされ、列の値がに設定されます。22