如果您查看您的数据库,您将看到一个名为“EdmMetadata”的表,Entity Framework 使用它来确定自数据库创建以来是否对您的模型进行了任何更改(在您的情况下)。
如果模型和数据库不同,默认行为是抛出异常。要获得不同的行为,您需要使用IDatabaseInitializer<TContext>
.
幸运的是,Entity Framework 附带了该接口的一些默认实现:
CreateDatabaseIfNotExists<TContext>
- 如果数据库尚不存在,这将创建数据库。
DropCreateDatabaseAlways<TContext>
- 这将在每次运行应用程序时重新创建数据库。
DropCreateDatabaseIfModelChanges<TContext>
- 如果在 EdmMetadata 表中检测到更改(通常是创建新表的结果),这将重新创建数据库。
当然,您也可以通过覆盖该InitializeDatabase
方法来创建您自己的此接口的实现。
使用这些初始化策略之一的示例如下所示:
Database.SetInitializer(
new DropCreateDatabaseIfModelChanges<NameOfYourDbContextClass>())
在选择初始化策略之前请仔细考虑,因为您最终可能会丢失已经输入数据库的数据,这可能不是您想要的。
Entity Framework 提供的实现提供了Seed
一种使用数据加载数据库的方法,以便您可以在每次创建数据库时使用默认数据预加载数据库。
本文提供了更多信息。