我正在使用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)
,则不会创建我的数据库。
顺便说一句,我真的无法理解为什么我的数据库中没有任何数据。 迁移已启用。我错过了什么吗?
答案 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());
}
}