2011-11-10 11 views
0

はここScottGuがテーブルをシードする方法を示しTutorialを書いた私のモデルEF Code First:One-To-Many関係でテーブルをシードする方法は?

public class Movie 
{ 
    public int MovieID { get; set; } 

    public int GenreID { get; set; } 

    [Required, StringLength(200)] 
    public string Title { get; set; } 

    public int MovieLength { get; set; } 

    [Required, StringLength(1000)] 
    public string MovieSummary { get; set; } 

    public virtual Genre Genre { get; set; } 

} 

public class Genre 
{ 
    public int GenreID { get; set; } 
    public string GenreName { get; set; } 

    public virtual IEnumerable<Movie> Movies { get; set; } 
} 

public class ZimelleShopDbContext : DbContext 
{ 
    public DbSet<Movie> Movies { get; set; } 
    public DbSet<Genre> Genres { get; set; } 
} 

です。これらの2つのテーブルが1対多の関係にある場合に、上記の例をシードする方法を知りたいと思います。 EDIT

を支援するための

おかげで、私はそれが他の方法で回避しなかった、それが働きました。私が気をつけなければならなかったのは、ICollectionをインスタンス化することだけでした。

public class Genre 
{ 
    public Genre() 
    { 
     Movies = new List<Movie>(); 
    } 

    //... 
} 

それから私は、それはまだ動作します。この

protected override void Seed(ZimelleShopDbContext context) 
    { 
     var genre = new Genre { GenreName = "Foo" }; 
     var movie = new Movie { Title = "Bar", MovieSummary = "Baz" }; 

     genre.Movies.Add(movie); 
     context.Genres.Add(genre); 
     context.SaveChanges(); 
    } 

をしました。

答えて

1

IEnumerableはコレクションインターフェイスではないため、をICollection<Movie> Moviesに置き換える必要があります。あなたの初期化子で

public class Genre 
{ 
    public int GenreID { get; set; } 
    public string GenreName { get; set; } 

    public virtual ICollection<Movie> Movies { get; set; } 
} 

protected override void Seed(ZimelleShopDbContext context) 
{ 
    var genre = new Genre { GenreName = "Foo" }; 
    var movie = new Movies { Title = "Bar", MovieSummary = "Baz", Genre = genre }; 

    context.Movies.Add(movie); 

    context.SaveChanges(); 
} 
+0

それは完全に働きました。私は映画の代わりにジャンルで行くことを試みた(上記のEDITを参照)。ありがとうございました。 – Richard77

関連する問題