实体框架不播种数据

时间:2015-11-26 17:24:11

标签: c# entity-framework ef-code-first

我正在使用EF Code First构建WPF应用程序。

我的数据库已创建,但是当我尝试在初始化时将数据置于其中时,它会失败(没有插入数据)。

这是我的初始化程序:

public class MyDBContextSeeder : DropCreateDatabaseIfModelChanges<MyDBContext>
{
    protected override void Seed(MyDBContext context)
    {
        IList<Dog> defaultDog = new List<Dog>();
        defaultDog.Add(new Dog("Spike"));

        foreach (Dog d in defaultDog)
            context.Dogs.Add(d);

        // more data here....

        base.Seed(context);
    }
}

在另一个课程中我有MyDBContext

public class MyDBContext : DbContext
{
    public MyDBContext() : base("MyDB")
    {
        Database.SetInitializer<MyDBContext>(new MyDBContextSeeder());
    }
    //public DbSet<>.....
}

然后我在App.xamls.cs中插入了这段代码,重写了OnStartup方法。

using (var db = new MyDBContext())
{
  Database.SetInitializer<MyDBContext>(new CreateDatabaseIfNotExists<MyDBContext>());
  new MyDBContextSeeder().InitializeDatabase(db); 
}

如果我不使用new MyDBContextSeeder().InitializeDatabase(db),则不会创建我的数据库。

顺便说一句,我真的无法理解为什么我的数据库中没有任何数据。 迁移已启用。我错过了什么吗?

2 个答案:

答案 0 :(得分:0)

您正在将您的狗正确插入DbContext,但您没有保存更改。请在context.SaveChanges()方法的末尾添加一个.Seed()来电,您的狗应该出现在数据库中。纬!汪汪!

答案 1 :(得分:0)

试试这个..

public class MyDBContextSeeder : DropCreateDatabaseIfModelChanges<MyDBContext>
    {
        protected override void Seed(MyDBContext context)
        {
            IList<Dog> defaultDog = new List<Dog>();
            defaultDog.Add(new Dog("Spike"));

            foreach (Dog d in defaultDog)
                context.Dogs.Add(d);

            context.SaveChanges();
        }
    }

-

public class MyDBContext : DbContext
{
    static MyDBContext()
    {
        Database.SetInitializer<MyDBContext>(new MyDBContextSeeder());
    }
}