5

我为我的实体框架应用程序启用了迁移。现在,我想更新我的远程服务器上的数据库。我运行了这个命令:

PM> Update-Database -Script 

所以它生成了一个sql脚本。但是,这个脚本包含了我在数据库中实际拥有的所有元数据,而不是所做的更改;所以,当我尝试在我的远程服务器上运行这个 sql 脚本时,它说表已经存在。

我如何生成只包含必要更新的 sql 脚本?

4

3 回答 3

7

您可以为此指定特定的迁移。如果您有一个名为 Foo 的迁移,例如:

Update-Database -TargetMigration Foo -Script

它将为 Foo 迁移生成一个迁移脚本。将 Foo 替换为您需要在该服务器上运行的任何迁移。

Add-Migration InitialMigration
Add-Migration AddCustomers
Add-Migration AddProjects

假设您的项目中有上述三个迁移,并且您的本地数据库已应用所有这些迁移,但远程数据库只有 InitialMigration。您可以运行以下命令:

Update-Database -SourceMigration InitialMigration -TargetMigration AddProjects -Script

这将在远程服务器上应用两个迁移(AddCustomers 和 AddProjects)。

于 2013-02-19T17:17:32.133 回答
2

如果您可以通过远程桌面访问服务器,则可以执行命令行迁移工具,该工具通常位于 [projectFolder]/packages/EntityFramework.5.0.0/tools/migrate.exe

并这样称呼它:

Migrate.exe [StartupProjectName] /StartupDirectory:"[BIN folder path]" /ConnectionStringName:"[Connection String Name]" /StartupConfigurationFile:"[Path to web or app.config]"
于 2013-02-20T03:25:48.803 回答
1

当您部署应用程序的新版本时,您可以使用 MigrateDatabaseToLatestVersion Initializer 自动应用任何新迁移:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext, Configuration>());
于 2015-01-07T15:50:18.183 回答