为什么我的 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 将被调用,导致数据库被植入您的数据。
我正在尝试按照一些教程在 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 将被调用,导致数据库被植入您的数据。