我刚刚安装了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_AutomaticMigration'不是有效的迁移。 必须在源和目标时使用显式迁移 编写它们之间的升级脚本。
为了看看会发生什么,我颠倒了两个参数(向后迁移)并且在添加 -force 标志(删除了新列)之后确实获得了我期望的脚本。
如何获取首次迁移的脚本?
答案 0 :(得分:14)
开始对现有数据库使用EF迁移的正确方法是首先添加包含当前数据库元数据的空迁移。
我认为您必须回滚到与初始数据库模式兼容的模型。然后运行以下命令:
add-migration InitialSchema -IgnoreChanges
这应该为您提供初始迁移,它不执行任何操作,但包含当前模型的元数据。如果您已扩展代码模型以涵盖数据库中已存在的更多表,您当然可以稍后使用-IgnoreChanges
添加迁移。
完成初始迁移步骤后,脚本就可以了。
通常我不建议使用自动迁移,除非您只打算仅使用自动迁移。如果您想对数据库的更改进行某种控制(包括编写脚本),那么就可以进行基于代码的迁移。