本文是翻译的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
项目的文件夹中创建三个文件,如下所示。
- <timestamp> _ <迁移名称> .cs:主迁移文件,包括Up()和Down()方法中的迁移操作。Up()方法包括用于创建DB对象的代码,Down()方法包括用于删除DB对象的代码。
- <timestamp> _ <迁移名称> .Designer.cs:迁移元数据文件,其中包含EF Core使用的信息。
- <contextclassname> ModelSnapshot.cs:当前模型的快照。这用于确定创建下一次迁移时更改的内容。
现在,在创建迁移快照之后,就可以创建数据库了。
创建或更新数据库
使用以下命令创建或更新数据库架构。
Package Manager Console
PM> Update-Database
CLI
> dotnet ef database update
该Update
命令将基于上下文和域类以及使用add-migration
or 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
选项指定一系列迁移。