Backend - C# EF Core 执行迁移 Migrate

目录

一、创建Postgre数据库

二、安装包

(一)查看是否存在该安装包

(二)安装所需包

三、执行迁移命令

[1. 作用](#1. 作用)

[2. 操作位置](#2. 操作位置)

[3. 执行(针对visual studio)](#3. 执行(针对visual studio))

查看迁移功能的常用命令:

[查看已应用的迁移文件(只针对Entity Framework 6 ):](#查看已应用的迁移文件(只针对Entity Framework 6 ):)

生成迁移文件:

执行迁移,更新数据库:

若想回滚到之前的迁移状态:

(1)先回滚

[① 回滚到指定迁移文件:](#① 回滚到指定迁移文件:)

[② 回滚所有迁移文件(重置数据库)](#② 回滚所有迁移文件(重置数据库))

(2)再删除

[四、使用 NET CLI 执行迁移(可跨平台)](#四、使用 NET CLI 执行迁移(可跨平台))

[(一)安装 .NET SDK](#(一)安装 .NET SDK)

确认是否已安装的命令:

[(二)安装 dotnet-ef 工具(局部)](#(二)安装 dotnet-ef 工具(局部))

[1. 进入项目根目录(有.csproj文件所在处)](#1. 进入项目根目录(有.csproj文件所在处))

(1)查看当前位置的命令

(2)切换工作目录

[2. 创建dotnet-tools.json 文件](#2. 创建dotnet-tools.json 文件)

(1)创建文件的命令

(2)执行该命令的作用

[3. 安装dotnet-ef工具](#3. 安装dotnet-ef工具)

(1)在线安装命令

(2)若不允许安装,提示下载的代理问题。则离线下载

[① 下载离线工具](#① 下载离线工具)

[② 设置套件来源](#② 设置套件来源)

[③ 取消其他套件来源](#③ 取消其他套件来源)

[④ 执行下载安装](#④ 执行下载安装)

[4. 查看已安装的工具](#4. 查看已安装的工具)

[5. 安装 Microsoft.EntityFrameworkCore.Design](#5. 安装 Microsoft.EntityFrameworkCore.Design)

(1)第一种:使用NuGet管理器

(2)第二种:执行dotnet命令

[(三)使用 dotnet-ef 工具](#(三)使用 dotnet-ef 工具)

[1. 查看迁移文件](#1. 查看迁移文件)

[2. 生成迁移文件](#2. 生成迁移文件)

[3. 执行迁移(更新数据库)](#3. 执行迁移(更新数据库))

[4. 回滚](#4. 回滚)

(1)先回滚

[① 回滚到指定迁移文件](#① 回滚到指定迁移文件)

[② 回滚所有迁移文件(重置数据库)](#② 回滚所有迁移文件(重置数据库))

(2)再删除


一、创建Postgre数据库

使用数据库软件(如pgadmin),创建一个空的数据库(自定义数据库名、选择用户、记住密码)。

二、安装包

(一)查看是否存在该安装包

  1. 使用命令查看是否安装:
bash 复制代码
Get-Package

# 或者用
dotnet list package
  1. 使用Visual Studio NuGet 管理器

  2. 查看根目录文件内容,即 .csproj 文件内容

(二)安装所需包

首先,右键点击该项目,选择 "管理 NuGet 套件"。

然后,搜索 Microsoft.EntityFrameworkCore.Design,点击 "Install" 。

即,在根目录文件中(.csproj后缀的文件)会配置如下内容:

cs 复制代码
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.0">
    <PrivateAssets>all</PrivateAssets>
    <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>

三、执行迁移命令

1. 作用

使数据库表和本地模型类(实体类)的内容保持一致。

2. 操作位置

在包管理器中执行命令。即,打开包管理器:VS菜单的工具 > NuGet包管理器 > 程序包管理器控制台。

3. 执行(针对visual studio)

在包管理器控制台中,依次执行如下命令

查看迁移功能的常用命令:
bash 复制代码
get-help about_entityframeworkcore
查看已应用的迁移文件(只针对Entity Framework 6 ):
bash 复制代码
Get-Migration
# 例如
Get-Migration -Context "BookContext" -Project "Repository" -StartupProject "Api"
生成迁移文件:
bash 复制代码
Add-Migration "XXX"

# 若指定DbContext和项目时,用:
Add-Migration "自定义Migration名" -Context "自定义DbContext名" -Project "自定义Repository项目名" -StartupProject "自定义Api启动项目名"

# 例如:
Add-Migration "Migration001" -Context "BookContext" -Project "Repository" -StartupProject "Api"
执行迁移,更新数据库:
bash 复制代码
Update-Database <MigrationName>

# 例如
Update-Database -Context BookContext -Project Repository -StartupProject Api 
若想回滚到之前的迁移状态:
(1)先回滚
① 回滚到指定迁移文件:
bash 复制代码
Update-Database  "XXX"

# 例如,回滚到Migration003文件
Update-Database "20241216054704_Migration003"  -Context BookContext -Project Repository -StartupProject Api
② 回滚所有迁移文件(重置数据库)
bash 复制代码
Update-Database 0

# 例如
Update-Database 0 -Context MesContext -Project Repository -StartupProject Api
(2)再删除

即:删除尚未应用到数据库的一个迁移文件(先从时间最近的,最新的一个文件开始):

bash 复制代码
Remove-Migration

# 例如
Remove-Migration  -Context BookContext -Project Repository -StartupProject Api

若要删除所有未应用的,那么就一直执行Remove-Migration 命令。

针对回滚到指定迁移文件,再执行删除的结果是:

直到提示: The migration XXX' has already been applied to the database. Revert it and try again. If the migration has been applied to other databases, consider reverting its changes using a new migration instead.就表明删除了所有未应用的迁移文件。

回滚所有迁移文件(重置数据库),再执行删除的结果是:

整个 migrations 文件夹都会自动被删除。

四、使用 NET CLI 执行迁移(可跨平台)

针对.NET Core和.NET 5+应用程序,可以使用NET CLE管理.NET项目。

(一)安装 .NET SDK

确认是否已安装的命令:

bash 复制代码
dotnet --version

(二)安装 dotnet-ef 工具(局部)

1. 进入项目根目录(有.csproj文件所在处)

(1)查看当前位置的命令
bash 复制代码
Get-Location
# 或简写:
gl
(2)切换工作目录
bash 复制代码
Set-Location "C:\Projects\MyNewProject"
# 或简写:
cd "C:\Projects\MyNewProject"

2. 创建dotnet-tools.json 文件

(1)创建文件的命令
bash 复制代码
dotnet new tool-manifest
(2)执行该命令的作用

在项目根目录下,自动生成一个 .config/dotnet-tools.json 文件,用于管理项目中使用的局部工具。

3. 安装dotnet-ef工具

(1)在线安装命令
bash 复制代码
dotnet tool install dotnet-ef
(2)若不允许安装,提示下载的代理问题。则离线下载
① 下载离线工具

进入https://www.nuget.org/packages/dotnet-ef/,点击页面右边呈现的Download package,将下载好的dotnet-ef.9.0.0.nupkg文件随机存储在本地(例如,存储在C:\LocalNuGet中)。

② 设置套件来源

命令:

bash 复制代码
dotnet nuget add source "C:\LocalNuGet" --name LocalSource
③ 取消其他套件来源

右击该项目,选择 "管理 NuGet 套件",取消其他套件,只保留自己刚添加的LocalSource。

④ 执行下载安装

命令:

bash 复制代码
dotnet tool install --add-source "C:\LocalNuGet" dotnet-ef

4. 查看已安装的工具

命令:

bash 复制代码
dotnet tool list

5. 安装 Microsoft.EntityFrameworkCore.Design

如果前面已经安装Microsoft.EntityFrameworkCore.Design,则跳过该步骤。

(1)第一种:使用NuGet管理器

首先,右键点击该项目,选择 "管理 NuGet 套件"。

然后,搜索 Microsoft.EntityFrameworkCore.Design,点击 "Install" 。

即,在根目录文件中(.csproj后缀的文件)会配置如下内容:

cs 复制代码
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
(2)第二种:执行dotnet命令

执行命令:

bash 复制代码
dotnet add package microsoft.entityframeworkcore.design

(三)使用 dotnet-ef 工具

1. 查看迁移文件

命令:

bash 复制代码
dotnet ef migrations list

# 例如:
dotnet ef migrations list --context DBContext
# 或者
dotnet ef migrations list --context DBContext --project "E:\test\myRepository" --startup-project "E:\test\myApi"

2. 生成迁移文件

命令:

bash 复制代码
# 例如
dotnet ef migrations add myappMigration001 
# 或者
dotnet ef migrations add myappMigration001 --context DBContext --project "E:\test\myappRepository" --startup-project "E:\CSharpPro\test\myApi"

3. 执行迁移(更新数据库)

bash 复制代码
dotnet ef database <MigrationName>

# 例如
dotnet ef database update
# 或者
dotnet ef database update --context DBContext --project "E:\test\myappRepository" --startup-project "E:\CSharpPro\test\myApi"

4. 回滚

若想回滚到之前的迁移状态:

(1)先回滚
① 回滚到指定迁移文件
bash 复制代码
dotnet ef database update "XXX"

# 例如,回滚到Migration003文件
dotnet ef database update "20241216054704_Migration003" --context DBContext --project "E:\test\myappRepository" --startup-project "E:\CSharpPro\test\myApi"
② 回滚所有迁移文件(重置数据库)
bash 复制代码
dotnet ef database update 0

# 例如,回滚到Migration003文件
dotnet ef database update 0 --context DBContext --project "E:\test\myappRepository" --startup-project "E:\CSharpPro\test\myApi"
(2)再删除

即:删除尚未应用到数据库的一个迁移文件(先从时间最近的,最新的一个文件开始):

bash 复制代码
dotnet ef migrations remove

# 例如
dotnet ef migrations remove --context DBContext --project "E:\test\myappRepository" --startup-project "E:\CSharpPro\test\myApi"
相关推荐
qq_5298353520 分钟前
Redis作为缓存和数据库的数据一致性问题
数据库·redis·缓存
山猪打不过家猪5 小时前
ASP.NET Core Clean Architecture
java·数据库·asp.net
qwy7152292581636 小时前
13-R数据重塑
服务器·数据库·r语言
Bio Coder6 小时前
R语言安装生物信息数据库包
开发语言·数据库·r语言
钊兵7 小时前
数据库驱动免费下载(Oracle、Mysql、达梦、Postgresql)
数据库·mysql·postgresql·oracle·达梦·驱动
weixin_425878238 小时前
Redis复制性能优化利器:深入解析replica-lazy-flush参数
数据库·redis·性能优化
左灯右行的爱情8 小时前
Redis数据结构总结-listPack
数据结构·数据库·redis
隔壁老王1569 小时前
mysql实时同步到es
数据库·mysql·elasticsearch
想要打 Acm 的小周同学呀9 小时前
Redis三剑客解决方案
数据库·redis·缓存