Entity framework 4 获取初始实体框架迁移脚本

Entity framework 4 获取初始实体框架迁移脚本,entity-framework-4,entity-framework-migrations,Entity Framework 4,Entity Framework Migrations,我刚刚安装了实体框架迁移,向类添加了一个属性,并尝试了EF迁移 我的开发数据库被及时更新。到目前为止,一切顺利 现在,我想为生产数据库迁移的首次使用创建一个更改脚本。注意,有一个预先存在的数据库,因为我将其应用于一个现有的项目 我进行的迁移有: PM> Get-Migrations Retrieving migrations that have been applied to the target database. 201204102238194_AutomaticMigration 2

我刚刚安装了实体框架迁移,向类添加了一个属性,并尝试了EF迁移

我的开发数据库被及时更新。到目前为止,一切顺利

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

我进行的迁移有:

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_自动迁移”不是有效的迁移。 在以下情况下,源和目标都必须使用显式迁移: 为它们之间的升级编写脚本

为了看看会发生什么,我反转了这两个参数(向后迁移),并在添加-force标志(删除新列)后得到了预期的脚本


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

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

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

add-migration InitialSchema -IgnoreChanges
这将为您提供一个初始迁移,该迁移不做任何事情,但包含当前模型的元数据。当然,如果您已经扩展了代码模型以覆盖数据库中已有的更多表,那么以后可以使用
-IgnoreChanges
添加迁移

一旦初始迁移步骤就绪,脚本就可以工作了


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

您是如何获得初始迁移的?您的自动迁移应该包含为整个数据库创建脚本,这不是您想要的-在现有数据库上执行这样的脚本会导致许多错误。你能试试吗?@Ladislav:我不需要整个数据库的脚本,因为我的整个(初始)数据库已经在生产中了。我不知道的是如何从使用迁移之前已经投入生产的第一个数据库到我的第一次更新。我确信迁移中有我的初始DB模式,因为将SourceMigration和TargetMigration参数与-force一起反转会创建一个脚本来删除我的新列。我就是不能让它从初始数据库转到第一个新迭代(添加那几列)。