EF Code First:如何在一对多关系中播种表格?

时间:2011-11-10 00:38:09

标签: ef-code-first

这是我的模特

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

ScottGu写了一篇Tutorial来展示如何为一个表种子。我想知道如何在一对多关系中的那两个表的情况下播种上面的例子。

感谢您的帮助

修改

我反过来做了,它起作用了。我唯一需要注意的是实例化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 个答案:

答案 0 :(得分:1)

您需要将IEnumerable<Movie> Movies替换为ICollection<Movie> Movies,因为IEnumerable不是收集界面。

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 ();
}