将CodeDatabaseIfNotExists与Code First Migration一起使用?

时间:2012-09-06 02:23:01

标签: entity-framework-4.3 ef-migrations

在我的项目中,当前的方法是使用CreateDatabaseIfNotExists创建数据库(如果尚不存在),并从Intializer播种初始数据。我还在升级到Entity 4.4后添加了Code First Migration支持,以便将来当我们更改模块/数据库结构时,我们可以更新客户端数据库而不删除它们存在的数据库。

然而它似乎运行不正常,例如,我现在停留在表单无法加载的设计时间,错误消息类似于The model backing the 'myEntities' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).。但是模型和数据库确实是更新版本,似乎Migration没有识别CreateDatabaseIfNotExists生成的数据库,但同时在运行时似乎都运行良好。

此后我注意到,如果我让CreateDatabaseIfNotExists初始化数据库,Add-migration之后会失败并抱怨pending migration并要求我执行update-database。当我尝试执行update-database时,它也会失败,因为迁移路径似乎假设数据库处于初始设置状态并且将尝试运行所有迁移脚本,而不应该运行任何迁移脚本作为由CreateDatabaseIfNotExists确实与当前模型同步,根本不应迁移。

1 个答案:

答案 0 :(得分:0)

我发现系统表中有一个MigrationHistory表,无论初始化程序是CreateDatabaseIfNotExists还是MigrateDatabaseToLatestVersion,该表都将始终保存数据库初始化历史记录。不同之处在于,如果数据库由CreateDatabaseIfNotExists1, everytime the database initialized, the migriationId for that initialize record will be different, but初始化,则MigrateDatabaseToLatestVersion`将始终为每个迁移步骤保存相同的migrationId集。我猜这就是Entity Framework 5.0的工作原理。

所以最后,我放弃并重写我的数据库访问代码来播种初始数据库数据 在我的代码的其他部分而不是CreateDatabaseIfNotExists或迁移s配置`类,因为它们都符合我的需要。

相关问题