使EF4.3代码优先迁移忽略挂起的迁移

Joe*_*lor 6 ef-migrations entity-framework-4.3

我有一个我最近使用的数据库的本地实例DbContext.Database.Create(),因此该__MigrationHistory表存在一个InitalCreate与当前代码匹配的条目.

但是,迁移文件夹中存在一些基于代码的迁移.这些将在我们的开发和登台环境中运行,以使这些数据库与代码保持一致.但是,我不需要在本地应用它们,因为我使用当前代码创建了数据库.

我现在需要对模型进行更改并创建相应的迁移.但是当我跑步时Add-Migration TestMigration,我得到以下错误

Unable to generate an explicit migration because the following explicit 
migrations are pending: 

[201203271113060_AddTableX, 
 201203290856574_AlterColumnY]

Apply the pending explicit migrations before attempting to generate 
a new explicit migration.
Run Code Online (Sandbox Code Playgroud)

在这种情况下我该怎么办?我不能将Add-Migration工具指向另一个环境,因为它不能保证版本与我本地的版本匹配.我想要一个只与我所做的更改匹配的迁移.

看来我有几个选择,但没有一个是理想的:

  1. 从"迁移"文件夹中删除其他迁移,运行"添加迁移"命令,升级数据库,然后还原旧迁移.这很简单,但似乎有点hackish.
  2. 恢复到应用第一次迁移的源代码管理中的模型版本,然后构建它并使用它来创建数据库.然后获取最新版本,应用所有迁移,然后我就可以添加迁移了.这似乎付出了很多努力!
  3. 手动创建迁移.

有没有人有任何关于如何管理这个的建议?

Joe*_*lor 2

我发现最有效的方法非常简单:DbContext.Database.Create()启用迁移后就不要使用。如果您想以编程方式创建新数据库,请改用迁移 API。

var migrator = new DbMigrator(new Configuration());
migrator.Update();
Run Code Online (Sandbox Code Playgroud)

然后,您就获得了完整的迁移历史记录,并且添加进一步的迁移将按预期进行。