1

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

但是它似乎并没有很好地工作,例如,我现在被困在无法加载表单并且错误消息类似于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. 当我尝试执行 a 时update-database,它也会失败,因为迁移路径似乎假设数据库处于初始设置状态,并将尝试运行所有迁移脚本,而不应运行任何迁移脚本,因为生成的数据库CreateDatabaseIfNotExists确实与当前同步模型,根本不应该迁移。

4

1 回答 1

0

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

所以最后,我放弃并重写了我的 DB Access 代码,以在我的代码的其他部分而不是CreateDatabaseIfNotExistsMigration sConfiguration 类中播种初始数据库数据,因为两者都适合我的需要。

于 2012-09-10T20:59:21.790 回答