为什么我的ContextInitializer for EF 6没有参考?

时间:2015-05-23 10:04:05

标签: wpf entity-framework code-first

我正在尝试通过以下教程学习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如何创建数据库?

1 个答案:

答案 0 :(得分:0)

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

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

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