从EF 5代码优先迁移生成完整的SQL脚本


Answers:


285

API似乎已更改(或者至少对我不起作用)。

在Package Manager控制台中运行以下命令可以正常工作:

Update-Database -Script -SourceMigration:0

13
我知道这是正确的答案,但是当参数通常为字符串时,您到底是怎么发现0起作用的呢?
Dave R

26
在尝试了所有我认为可以使它起作用之后的尝试,然后只是尝试和错误:)
Matt Wilson

1
这会创建数据库的精确副本吗?包括表内容?
Multitut 2015年

2
@Multitut:不,它只会做结构。
Martin Clarke 2015年

6
万一有人在寻找如何在EfCore中执行此操作并最终像我一样出现在此处,则命令为:dotnet ef migrations script。更多关于文档:docs.microsoft.com/en-us/ef/core/managing-schemas/migrations/...
拉斐尔米塞利

13

对于使用实体框架核心的人都在这里结束。这就是你的做法。

# Powershell / Package manager console
Script-Migration

# Cli 
dotnet ef migrations script

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

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

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

此命令有几个选项。

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

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

幂等可任选地生成的脚本。该脚本仅在尚未将迁移应用于数据库的情况下才应用。如果您不完全知道上一次应用到数据库的迁移是什么,或者如果您要部署到可能每个迁移不同的多个数据库,则此功能很有用。


这工作到一定程度。一旦开始更改列名,它将开始引发错误,创建DacPac是更好的解决方案。特别是当您开始在CI / CD中使用管道时
Nick Turner

8

为了补充Matt wilson的答案,我有一堆代码优先的实体类,但是没有数据库,因为我没有备份。因此,我在实体框架项目中执行了以下操作:

在Visual Studio中打开“程序包管理器”控制台,然后键入以下内容:

Enable-Migrations

Add-Migration

给您的迁移起一个名字,例如“ Initial”,然后创建迁移。最后键入以下内容:

Update-Database

Update-Database -Script -SourceMigration:0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.