我正在尝试通过以下教程学习WPF中的EF 6 Code-first。由于我熟悉模型优先,我可以理解大多数部分,除了我发现ContextInitializer
有点令人困惑。我定义了ContextInitializer
这样的代码:
public class ContextInitializer : DropCreateDatabaseIfModelChanges<Context>
{
protected override void Seed(Context context)
{
var customers = new List<Customer>
{
new Customer{Name="Jane",Phone="2238718"},
new Customer{Name="David",Phone="43245608"},
new Customer{Name="Mike",Phone="90814417"}
};
customers.ForEach(cu => context.Customers.Add(cu));
context.SaveChanges();
}
}
这是我的Context
课程:
public class Context : DbContext
{
public Context()
: base("MVVM")
{
}
public DbSet<Customer> Customers { get; set; }
}
并且它在第一次运行时创建了一个数据库,我认为这很奇怪,因为这个类有零参考。由于Seed
方法不会再次触发,我无法理解其工作原理。
有人可以向我解释我的没有引用的ContextInitializer如何创建数据库?
答案 0 :(得分:0)
App.Config
中是否存在以下部分?
<contexts>
<context type="(your name space).Context, MVVM">
<databaseInitializer type="(your name space).ContextInitializer, MVVM" />
</context>
</contexts>
如果是,程序知道在哪里查找ContextInitializer
。如果数据库已经存在并且数据库中的表已经与POCO /模型类的表匹配,则不会发生任何事情。如果模型已更改或数据库不存在,则将调用此类,从而导致数据库附加数据。