为什么我的 EF6 上下文初始值设定项具有零引用?

How come my ContextInitializer for EF 6 has zero refrences?

我正在尝试按照一些教程在 WPF 中学习 EF 6 代码优先。由于我熟悉模型优先,所以我可以理解大部分内容,但我发现 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 class:

public class Context : DbContext
{
    public Context()
        : base("MVVM")
    {

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

}

并且它首先创建了一个数据库 运行,我认为这很奇怪,因为这个 class 有 零引用 。由于 Seed 方法不再触发,我无法理解这是如何工作的。

有人可以向我解释一下我的零引用 ContextInitializer 如何创建数据库吗?

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

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

如果是,程序知道到哪里寻找 ContextInitializer。如果数据库已经存在并且数据库中的表已经与 POCO/model classes 中的表匹配,则不会发生任何事情。如果模型已更改或数据库不存在,此 class 将被调用,导致数据库被植入您的数据。