从 EF 5 Code First 迁移生成完整的 SQL 脚本

Posted

技术标签:

【中文标题】从 EF 5 Code First 迁移生成完整的 SQL 脚本【英文标题】:Generate full SQL script from EF 5 Code First Migrations 【发布时间】:2012-12-06 00:56:08 【问题描述】:

如何使用 Entity Framework 5 Code First 迁移来创建从初始(空)状态到最新迁移的完整数据库脚本?

MSDN Blog 的博文建议这样做,但似乎创建了一个空脚本:

Update-Database -Script -SourceMigration: $InitialDatabase

【问题讨论】:

msdn.microsoft.com/en-us/library/… 【参考方案1】:

API 似乎发生了变化(或者至少,它对我不起作用)。

在包管理器控制台中运行以下命令按预期工作:

Update-Database -Script -SourceMigration:0

【讨论】:

我知道这是正确的答案,但是当参数通常是字符串时,您到底是怎么发现 0 起作用的?! 在尝试了我能想到的一切来欺骗它工作之后,真的只是反复试验:) 这会创建数据库的精确副本吗?包括表格内容? @Multitut:不,它只会做结构。 以防万一有人在 EfCore 中寻找如何做到这一点并像我一样在这里结束,命令是:dotnet ef migrations script。有关文档的更多信息:docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/…【参考方案2】:

为了补充 Matt wilson 的答案,我有一堆代码优先的实体类,但没有数据库,因为我没有进行备份。所以我在我的实体框架项目上做了以下事情:

在 Visual Studio 中打开包管理器控制台并键入以下内容:

Enable-Migrations

Add-Migration

为您的迁移命名,例如“初始”,然后创建迁移。最后输入以下内容:

Update-Database

Update-Database -Script -SourceMigration:0

最后的命令将从您的实体类创建您的数据库表(前提是您的实体类格式正确)。

【讨论】:

【参考方案3】:

对于任何使用实体框架 core 的人都可以在这里结束。你就是这样做的。

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

您可以使用-From-To 参数生成更新脚本以将数据库更新到特定版本。

Script-Migration -From 20190101011200_Initial-Migration -To 20190101021200_Migration-2

https://docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/#generate-sql-scripts

这个命令有几个选项。

from 迁移应该是在运行脚本之前应用到数据库的最后一次迁移。如果未应用任何迁移,请指定 0(这是默认设置)。

to 迁移是运行脚本后将应用于数据库的最后一个迁移。这默认为您项目中的最后一次迁移。

可以选择生成幂等脚本。此脚本仅在尚未应用到数据库时才应用迁移。如果您不确切知道应用到数据库的最后一次迁移是什么,或者如果您要部署到多个数据库,而这些数据库可能各自处于不同的迁移状态,这将非常有用。

【讨论】:

这很有效。一旦您开始更改列名,它将开始引发错误,创建 DacPac 是一个更好的解决方案。尤其是当你开始在 CI/CD 中使用 Pipelines 时 您可以省略迁移名称中的时间戳,它仍然可以工作。

以上是关于从 EF 5 Code First 迁移生成完整的 SQL 脚本的主要内容,如果未能解决你的问题,请参考以下文章

使用 EF6(和 Code First 迁移)针对不同的数据库系统

ef6 code first,对已有数据库如何执行迁移

ef codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题.

C# EntityFramework Code First 迁移

EF Code First 没有看到所有迁移

我的Seed()方法永远不会在Code First EF 5中调用