问题 获取初始实体框架迁移脚本


我刚刚安装了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'不是有效的迁移。   必须在源和目标时使用显式迁移   编写它们之间的升级脚本。

只是为了看看会发生什么,我颠倒了两个参数(向后迁移)并且确实得到了添加后我想要的脚本 -力 flag(新列已删除)。

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


12510
2018-04-10 23:05


起源

你是如何得到初始迁移的?您的自动迁移应包含为整个数据库创建的脚本,这不是您想要的 - 在现有数据库上执行此类脚本会导致许多错误。你能试一下吗 这种方法 代替? - Ladislav Mrnka
@Ladislav:我真的不需要整个数据库的脚本,因为我的整个(初始)数据库已经在生产中。我无法弄清楚的是如何从生产中的第一个数据库(在使用迁移之前)到我的第一次更新。我确定Migrations在那里有我的初始数据库模式,因为反转SourceMigration和TargetMigration参数 -力 创建一个脚本来DROP我的新列。我无法让它从初始数据库转到第一个新的迭代(添加那几列)。 - Eric J.


答案:


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

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

add-migration InitialSchema -IgnoreChanges

这应该为您提供初始迁移,它不执行任何操作,但包含当前模型的元数据。您当然可以稍后添加迁移 -IgnoreChanges 如果您已扩展代码模型以涵盖数据库中已存在的更多表。

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

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


14
2018-04-14 15:28