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"
相关推荐
高铭杰30 分钟前
Citus源码(1)分布式表行为测试
数据库·分布式·citus
今天又在摸鱼39 分钟前
Spring Boot
java·数据库·spring boot
椰椰椰耶1 小时前
【redis】哨兵:docker搭建redis环境,容器的编排方式
数据库·redis·docker
forestsea1 小时前
PostgreSQL:索引与查询优化
数据库·postgresql
小样vvv2 小时前
【Redis】深入解析 Redis 五大数据结构
数据结构·数据库·redis
行走在云端z2 小时前
MongoDB 的索引是提高查询性能的核心机制,类似于传统关系型数据库的索引。以下是对 MongoDB 索引的详细说明:
数据库·mongodb
Wo3Shi4七2 小时前
MySQL ORDER BY、 LIMIT和DISTINCT 用法和实例
数据库·后端
镜舟科技2 小时前
如何理解 Apache Iceberg 与湖仓一体(Lakehouse)?
数据库·数据分析
Fanmeang3 小时前
ISIS-3 LSDB链路状态数据库同步
运维·网络·数据库·华为·智能路由器·ensp·isis
珹洺3 小时前
计算机网络:(三)计算机网络体系结构(附带图谱表格更好对比理解)
运维·服务器·网络·数据库·网络协议·计算机网络·网络安全