Entity Framework Core系列教程-26-数据迁移
Entity Framework Core数据迁移
迁移是一种通过保留数据来使数据库架构与EF Core模型保持同步的方法。
如上图所示,EF Core API从域(实体)类构建EF Core模型,并且EF Core迁移将基于EF Core模型创建或更新数据库架构。每当更改域类时,都需要运行迁移以使数据库架构保持最新。
EF Core迁移是一组命令,您可以在NuGet软件包管理器控制台或dotnet命令行界面(CLI)中执行。
下表列出了EF Core中的重要迁移命令。
程序包管理器控制台命令 | dotnet 命令行命令 | 使用方法 |
---|---|---|
add-migration <migration name> | Add <migration name> | 通过添加迁移快照来创建迁移 |
Remove-migration | Remove | 删除最后一个迁移快照 |
Update-database | Update | 根据上一个迁移快照更新数据库架构 |
Script-migration | Script | 使用所有迁移快照生成SQL脚本 |
添加迁移
第一次,您定义了初始领域类。此时,您的应用程序没有数据库可以存储您的域类中的数据。因此,首先,您需要创建一个迁移。
从Visual Studio中的工具-> NuGet软件包管理器->软件包管理器控制台中打开软件包管理器控制台,然后执行以下命令以添加迁移。
add-migration MyFirstMigration
如果使用的是dotnet命令行界面,请执行以下命令。
dotnet ef migrations add MyFirstMigration
在以上命令中,MyFirstMigration是迁移的名称。这将在项目的“迁移”文件夹中创建三个文件,如下所示。
- <timestamp>_<迁移名称>.cs:主迁移文件,其中包含Up()和Down()方法中的迁移操作。 Up()方法包括用于创建数据库对象的代码,而Down()方法包括用于删除数据库对象的代码。
- <时间戳>_<迁移名称>.Designer.cs:迁移元数据文件,其中包含EF Core使用的信息。
- <contextclassname> ModelSnapshot.cs:当前模型的快照。这用于确定在创建下一个迁移时所做的更改。
现在,在创建迁移快照之后,该创建数据库了。
创建或更新数据库
使用以下命令创建或更新数据库架构。
- 程序包管理器控制台
Update-Database
- dotnet 命令行
dotnet ef database update
Update命令将基于上下文和域类以及迁移快照创建数据库,这些快照是使用add-migration或add命令创建的。
如果这是第一次迁移,则还将创建一个名为__EFMigrationsHistory的表,该表将存储所有迁移的名称以及何时将它们应用于数据库。
删除迁移
如果上一次迁移未应用到数据库,则可以将其删除。使用以下remove命令删除上一次创建的迁移文件并还原模型快照。
- 程序包管理器控制台
remove-migration
- dotnet 命令行
dotnet ef migrations remove
上面的命令将删除上一次迁移,并将模型快照还原为之前的迁移。请注意,如果已将迁移应用于数据库,则它将引发以下异常。
迁移<迁移名称>已被应用于数据库。还原它,然后再试一次。如果已将迁移应用于其他数据库,请考虑使用新迁移来还原其更改。
还原迁移
假设您更改了域类,并使用add-migration命令创建了名为MySecondMigration的第二个迁移,并使用Update命令将该迁移应用于数据库。但是,由于某种原因,您想将数据库还原到以前的状态。在这种情况下,请使用update-database <迁移名称>命令将数据库还原到指定的先前迁移快照。
- 程序包管理器控制台
Update-database MyFirstMigration
- dotnet 命令行
dotnet ef database update MyFirstMigration
上面的命令将基于名为MyFirstMigration的迁移还原数据库,并删除应用于名为MySecondMigration的第二个迁移的所有更改。这还将从数据库的__EFMigrationsHistory表中删除MySecondMigration条目。
注意:这不会删除与MySecondMigration相关的迁移文件。使用remove命令将其从项目中删除。
生成SQL脚本
使用以下命令为数据库生成SQL脚本。
- 程序包管理器控制台
script-migration
- dotnet 命令行
dotnet ef migrations script
上面的脚本命令默认将包含所有迁移的脚本。您可以使用-to和-from选项来指定迁移范围。
程序包管理器控制台命令进行迁移
可以使用Visual Studio中的程序包管理器控制台执行Entity Framework Core中的迁移命令。从Visual Studio中的工具-> NuGet软件包管理器->软件包管理器控制台中打开软件包管理器控制台,以执行以下命令。
程序包管理器控制台 | 用法 |
---|---|
Get-Help entityframework | 获取帮助entityframework显示有关实体框架命令的信息 |
Add-Migration | <迁移名称>通过添加迁移快照来创建迁移 |
Remove-Migration | 删除最后一个迁移快照 |
Update-Database | 根据上一个迁移快照更新数据库架构 |
Script-Migration | 使用所有迁移快照生成SQL脚本 |
Scaffold-DbContext | 为指定的数据库生成DbContext和实体类型类。这称为逆向工程 |
Get-DbContext | 获取有关DbContext类型的信息 |
Drop-Database | 删除数据库 |
Get-Help 获取帮助
get-help entityframework
Add-Migration 添加迁移
get-help entityframework
Remove-Migration 删除迁移
get-help entityframework
Update-Database 更新数据库
get-help entityframework
Script-migration 脚本迁移
get-help entityframework
scaffold-dbcontext 支架数据库上下文
get-help entityframework
Get-DbContext
get-help entityframework
Drop-Database 删除数据库
get-help entityframework
用于迁移的命令行界面命令
使用.NET Core Command List Interface执行实体框架核心命令。要使用.NET CLI,请通过编辑.NET Core项目的.csproj文件,在<ItemGroup>节点下添加<DotNetCliToolReference Include =“ Microsoft.EntityFrameworkCore.Tools.DotNet” Version =“ 2.0.0” />。
打开命令提示符,然后导航到项目的根文件夹,然后输入dotnet ef --help列出EF Core命令,如下所示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cD0PztSl-1581165405066)(d:\note\efcore\pic\31.png)]
正如您在上面看到的,有三个主要的EF命令可用:数据库,dbcontext和迁移。下表列出了所有EF命令和子命令。
命令 | 子命令 | 用法 |
---|---|---|
Database | drop | 删除数据库 |
update | 将数据库更新为指定的迁移 | |
DbContext | info | 获取有关DbContext类型的信息 |
list | 列出可用的DbContext类型 | |
scaffold | 为数据库提供DbContext和实体类型 | |
Migration | add | 添加新的迁移 |
list | 列出可用的迁移 | |
remove | 删除上一次迁移 | |
script: | 从迁移生成SQL脚本 |
让我们看看每个命令的可用选项。
Database Drop
dotnet ef database drop
Database Update
dotnet ef database update
DbContext Info
dotnet ef dbcontext info
DbContext List
dotnet ef dbcontext list
DbContext Scaffold
dotnet ef dbcontext scaffold
Add
dotnet ef migrations add
List
dotnet ef migrations list
Remove
dotnet ef migrations remove
Script
dotnet ef migrations script