11

我刚刚安装了 Entity Framework Migrations,向一个类添加了一个属性,然后试了一下 EF Migrations。

我的开发数据库及时更新。到现在为止还挺好。

现在,我想为生产数据库的迁移的初始使用创建一个更改脚本。请注意,有一个预先存在的数据库,因为我将它应用于现有项目。

我的迁移是:

PM> Get-Migrations
Retrieving migrations that have been applied to the target database.
201204102238194_AutomaticMigration
201203310233324_InitialCreate
PM> 

我想我可以使用以下内容获得一个 delta 脚本:

Update-Database -SourceMigration:201203310233324_InitialCreate -TargetMigration:201204102238194_AutomaticMigration  -script

但是,这给了我错误:

“201204102238194_Au​​tomaticMigration”不是有效的迁移。在编写它们之间的升级脚本时,必须对源和目标使用显式迁移。

只是为了看看会发生什么,我颠倒了两个参数(向后迁移)并在添加-force标志后得到了我期望的脚本(删除了新列)。

如何获得第一次迁移的脚本?

4

1 回答 1

14

开始对现有数据库使用 EF 迁移的正确方法是首先添加一个包含当前数据库元数据的空迁移。

我认为您必须回滚到与初始数据库模式兼容的模型。然后运行以下命令:

add-migration InitialSchema -IgnoreChanges

这应该会给你一个初始迁移,它什么都不做,但包含当前模型的元数据。-IgnoreChanges如果您已扩展代码模型以涵盖数据库中已经存在的更多表,您当然可以稍后添加迁移。

完成初始迁移步骤后,脚本就可以工作了。

一般来说,我不建议使用自动迁移,除非您只打算使用自动迁移。如果您想对数据库的更改进行某种控制(包括编写脚本),那么基于代码的迁移就是一种方式。

于 2012-04-14T15:28:02.280 回答