Wpf 为什么EF 6的ContextInitializer没有引用?

Wpf 为什么EF 6的ContextInitializer没有引用?,wpf,entity-framework,code-first,Wpf,Entity Framework,Code First,我试图通过以下一些教程在WPF中首先学习EF6代码。因为我首先熟悉模型,所以我可以理解大多数部分,但我发现ContextInitializer有点混乱。我定义了一个ContextInitializer,如下代码: public class ContextInitializer : DropCreateDatabaseIfModelChanges<Context> { protected override void Seed(Context context) {

我试图通过以下一些教程在WPF中首先学习EF6代码。因为我首先熟悉模型,所以我可以理解大多数部分,但我发现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();

    }
}
它在第一次运行时创建了一个数据库,我认为这很奇怪,因为这个类没有引用。由于Seed方法不会再次启动,我无法理解它是如何工作的


有人能给我解释一下我的ContextInitializer是如何使用零引用创建数据库的吗?

您的App.Config中是否存在以下部分


如果是,程序知道在哪里查找ContextInitializer。如果数据库已经存在,并且数据库中的表已经与POCO/模型类的表匹配,则不会发生任何事情。如果模型已更改或数据库不存在,则将调用此类,从而使数据库与您的数据一起种子化。

在第一次运行时查询上下文之前,不应创建数据库。确定不是遗留下来的旧数据库吗?是的,我确定,因为我刚编写了一个简单的学习代码应用程序,没有旧数据库。你说的零引用到底是什么意思?请注意,代码优先上下文始终创建数据库,即使您没有显式配置初始值设定项。我指的是它从未实例化的ContextInitializer类。
public class Context : DbContext
{
    public Context()
        : base("MVVM")
    {

    }
    public DbSet<Customer> Customers { get; set; }

}
<contexts>
  <context type="(your name space).Context, MVVM">
    <databaseInitializer type="(your name space).ContextInitializer, MVVM" />
  </context>
</contexts>