我正在尝试使用自定义数据库初始化程序来播种一些数据,但无法使其工作。我尝试将一些配置添加到appConfig文件,但这也不起作用。
这是一个WPF应用程序,我不想引用我的EntityLibrary。我想使用上下文的构造函数来种子数据。怎么了?
编辑:问题是没有填充数据。调试时我看到上下文的构造函数SetInitiazlier函数被调用但是被覆盖的种子方法永远不会被调用,事实上调试器永远不会进入Seed方法。
同时XAML解析器提出错误抱怨TContext类型参数 DropCreateDatabaseIfModelChanges。我不能给出确切的错误,因为我家里没有代码。
这是我的自定义初始化程序:
public class DbInitializer : DropCreateDatabaseIfModelChanges<DemirbaşContext>
{
protected override void Seed(DemirbaşContext context)
{
Kullanıcı kullanıcı = new Kullanıcı
{
Ad = "Mert",
Soyad = "Mert",
KullanıcıAdı = "admin",
Şifre = "password",
Email = "mert@mert.com"
};
context.Kullanıcılar.Add(kullanıcı);
context.SaveChanges();
base.Seed(context);
}
}
这是我的上下文构造函数:
public DemirbaşContext():base("Demirbaş")
{
Database.SetInitializer<DemirbaşContext>(new DbInitializer());
}
编辑1:这是我当前的代码,但它仍然没有播种数据。你能看出什么是错的吗?
初始化器:
public class DbInitializer : DropCreateDatabaseIfModelChanges<DemirbaşContext>
{
protected override void Seed(DemirbaşContext context)
{
Kullanıcı kullanıcı = new Kullanıcı
{
Ad = "Mert",
Soyad = "Mert",
KullanıcıAdı = "admin",
Şifre = "password",
Email = "mert@mert.com"
};
context.Kullanıcılar.Add(kullanıcı);
context.SaveChanges();
}
}
应用程序启动:
public partial class App : Application
{
public App()
{
// Seed data, remove after getting seeding in custom db initiazlier to work
DemirbaşContext context = new DemirbaşContext();
DbInitializer initializer = new DbInitializer();
Database.SetInitializer<DemirbaşContext>(initializer);
context.Database.Initialize(false);
}
}
答案 0 :(得分:3)
将初始化代码移至应用程序启动。它不属于上下文的构造函数和手动强制初始化:
Database.SetInitializer<DemirbaşContext>(new DbInitializer());
context.Database.Initialize(false);