从 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 迁移)针对不同的数据库系统
ef codeFirst 修改表结构 增加字段等 EF code first需要重新生成库导致数据丢失的问题.