站点图标 江湖人士

EF Core 怎样迁移数据库 2024指南

EF Core获取上下文SQL语句

EF Core获取上下文SQL语句

本文是翻译的EF Core 怎样迁移数据库指南,迁移是一种通过保留数据使数据库模式与EF Core模型保持同步的方法。

根据上图,EF Core API从域(实体)类构建EF Core模型,EF Core迁移将基于EF Core模型创建或更新数据库模式。每当更改域类时,都需要运行迁移以使数据库架构保持最新。

EF Core 怎样迁移数据库

EF Core迁移是一组命令,您可以在NuGet Package Manager控制台或dotnet命令行界面(CLI)中执行这些命令。

下表列出了EF Core中的重要迁移命令。

PMC命令dotnet CLI命令用法
add-migration <迁移名称>添加<迁移名称>通过添加迁移快照创建迁移。
删除迁移去掉删除上次迁移快照。
更新数据库更新根据上次迁移快照更新数据库模式。
脚本迁移脚本使用所有迁移快照生成SQL脚本。

添加迁移

在第一次,您定义了初始域类。此时,您的应用程序没有可以存储域类数据的数据库。因此,首先,您需要创建迁移。

从Visual Studio中的菜单Tools – > NuGet Package Manager – > Package Manager Console打开Package Manager Console,然后执行以下命令添加迁移。

Package Manager Console
PM> add-migration MyFirstMigration

如果使用的是dotnet命令行界面,请执行以下命令。

CLI
> dotnet ef migrations add MyFirstMigration

在上面的命令中,MyFirstMigration是迁移的名称。这将在Migrations项目的文件夹中创建三个文件,如下所示。

  1. <timestamp> _ <迁移名称> .cs:主迁移文件,包括Up()和Down()方法中的迁移操作。Up()方法包括用于创建DB对象的代码,Down()方法包括用于删除DB对象的代码。
  2. <timestamp> _ <迁移名称> .Designer.cs:迁移元数据文件,其中包含EF Core使用的信息。
  3. <contextclassname> ModelSnapshot.cs:当前模型的快照。这用于确定创建下一次迁移时更改的内容。

现在,在创建迁移快照之后,就可以创建数据库了。

创建或更新数据库

使用以下命令创建或更新数据库架构。

Package Manager Console
PM> Update-Database
CLI
> dotnet ef database update

Update命令将基于上下文和域类以及使用add-migrationor add命令创建的迁移快照创建数据库。

如果这是第一次迁移,那么它还将创建一个名为的表__EFMigrationsHistory,该表将存储所有迁移的名称,以及它们何时应用于数据库。

删除迁移

如果未应用于数据库,则可以删除上次迁移。使用以下删除命令删除上次创建的迁移文件并还原模型快照。

Package Manager Console
PM> remove-migration
CLI
> dotnet ef migrations remove

上述命令将删除上次迁移,并将模型快照还原为上一次迁移。请注意,如果迁移已应用于数据库,则会引发以下异常。

迁移<迁移名称>已应用于数据库。还原它然后再试一次。如果迁移已应用于其他数据库,请考虑使用新迁移还原其更改。

恢复迁移

假设您更改了域类并创建了MySecondMigration使用该add-migration命令命名的第二个迁移,并使用该命令将此迁移应用于数据库Update。但是,由于某种原因,您希望将数据库还原到以前的状态。在这种情况下,使用该update-database <migration name>命令将数据库还原到指定的先前迁移快照。

Package Manager Console
PM> Update-database MyFirstMigration
CLI
> dotnet ef database update MyFirstMigration.

以上命令将根据命名的迁移还原数据库MyFirstMigration并删除为第二次迁移命名应用的所有更改MySecondMigration。这也将删除数据库中表的MySecondMigration条目__EFMigrationsHistory

注意:这不会删除与之相关的迁移文件MySecondMigration。使用remove命令将其从项目中删除。

生成SQL脚本

使用以下命令为数据库生成SQL脚本。

Package Manager Console
PM> script-migration
CLI
> dotnet ef migrations script

上面的脚本命令将默认包含所有迁移的脚本。您可以使用-to-from选项指定一系列迁移。

退出移动版