Backend - C# EF Core 执行迁移 Migrate

news2025/1/10 13:40:03

目录

一、创建Postgre数据库

二、安装包

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

(二)安装所需包

三、执行迁移命令

1. 作用

2. 操作位置

3. 执行(针对visual studio)

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

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

生成迁移文件:

执行迁移,更新数据库:

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

(1)先回滚

① 回滚到指定迁移文件:

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

 (2)再删除

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

(一)安装 .NET SDK

确认是否已安装的命令:

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

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

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

(2)切换工作目录

2. 创建dotnet-tools.json 文件

(1)创建文件的命令

(2)执行该命令的作用

3. 安装dotnet-ef工具

(1)在线安装命令

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

① 下载离线工具

② 设置套件来源

③ 取消其他套件来源

④ 执行下载安装

 4. 查看已安装的工具

 5. 安装 Microsoft.EntityFrameworkCore.Design

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

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

(三)使用 dotnet-ef 工具

1. 查看迁移文件

2. 生成迁移文件

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

4. 回滚

(1)先回滚

① 回滚到指定迁移文件

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

 (2)再删除


一、创建Postgre数据库

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

二、安装包

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

1. 使用命令查看是否安装:

Get-Package

# 或者用
dotnet list package

2. 使用Visual Studio NuGet 管理器

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

(二)安装所需包

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

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

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

<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)

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

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

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

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

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

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

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

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

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

确认是否已安装的命令:

dotnet --version

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

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

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

2. 创建dotnet-tools.json 文件

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

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

3. 安装dotnet-ef工具

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

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

② 设置套件来源

命令:

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

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

④ 执行下载安装

命令:

dotnet tool install --add-source "C:\LocalNuGet" dotnet-ef

 4. 查看已安装的工具

命令:

dotnet tool list

 5. 安装 Microsoft.EntityFrameworkCore.Design

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

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

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

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

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

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

执行命令:

dotnet add package microsoft.entityframeworkcore.design

(三)使用 dotnet-ef 工具

1. 查看迁移文件

命令:

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. 生成迁移文件

命令:

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

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

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)先回滚
① 回滚到指定迁移文件
dotnet ef database update "XXX"

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

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

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

dotnet ef migrations remove

# 例如
dotnet ef migrations remove --context DBContext --project "E:\test\myappRepository" --startup-project "E:\CSharpPro\test\myApi"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2274359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

KG-CoT:基于知识图谱的大语言模型问答的思维链提示

一些符号定义 知识图谱实体数量&#xff1a; n n n 知识图谱中关系类型数量&#xff1a; m m m 三元组矩阵&#xff1a; M ∈ { 0 , 1 } n n m \textbf{M} \in \{0, 1\}^{n \times n \times m} M∈{0,1}nnm&#xff0c; M i j k 1 M_{ij}^k 1 Mijk​1则说明实体 i i i和实…

HTML+CSS+JS制作中国传统节日主题网站(内附源码,含5个页面)

一、作品介绍 HTMLCSSJS制作一个中国传统节日主题网站&#xff0c;包含首页、节日介绍页、民俗文化页、节日活动页、联系我们页等5个静态页面。其中每个页面都包含一个导航栏、一个主要区域和一个底部区域。 二、页面结构 1. 顶部横幅区 包含传统中国风格的网站标题中国传统…

大模型WebUI:Gradio全解11——Chatbot:融合大模型的多模态聊天机器人(1)

大模型WebUI&#xff1a;Gradio全解11——Chatbots&#xff1a;融合大模型的聊天机器人&#xff08;1&#xff09; 前言本篇摘要11. Chatbot&#xff1a;融合大模型的多模态聊天机器人11.1 gr.ChatInterface()快速创建Chatbot11.1.1 定义聊天函数1. 随机回答“是”或“否”的聊…

springboot + vue+elementUI图片上传流程

1.实现背景 前端上传一张图片&#xff0c;存到后端数据库&#xff0c;并将图片回显到页面上。上传组件使用现成的elementUI的el-upload。、 2.前端页面 <el-uploadclass"upload-demo"action"http://xxxx.xxx.xxx:9090/file/upload" :show-file-list&q…

开源生成式物理引擎Genesis,可模拟世界万物

这是生成大模型时代 —— 它们能生成文本、图像、音频、视频、3D 对象…… 而如果将所有这些组合到一起&#xff0c;我们可能会得到一个世界&#xff01; 现在&#xff0c;不管是 LeCun 正在探索的世界模型&#xff0c;还是李飞飞想要攻克的空间智能&#xff0c;又或是其他研究…

【PPTist】批注、选择窗格

前言&#xff1a;本篇文章研究批注和选择窗格两个小功能 一、批注 批注功能就是介个小图标 点击可以为当前页的幻灯片添加批注&#xff0c;还能删除之前的批注 如果我们增加了登录功能&#xff0c;还可以在批注上显示当前的用户名和头像&#xff0c;不过现在是写死的。 左侧…

Vue进阶(贰幺贰)npm run build多环境编译

文章目录 一、前言二、实施三、总结&#xff1a;需要打包区分不同环境四、拓展阅读 一、前言 项目开发阶段&#xff0c;会涉及打包部署到多个环境应用场景&#xff0c;在不同环境中&#xff0c;需要进行项目层面的区分&#xff0c;做不同的操作&#xff0c;可以利用打包的--mo…

Elasticsearch—索引库操作(增删查改)

Elasticsearch中Index就相当于MySQL中的数据库表 Mapping映射就类似表的结构。 因此我们想要向Elasticsearch中存储数据,必须先创建Index和Mapping 1. Mapping映射属性 Mapping是对索引库中文档的约束&#xff0c;常见的Mapping属性包括&#xff1a; type&#xff1a;字段数据类…

“AI智慧组卷系统:让考试变得更简单、更公平!

大家好&#xff0c;我是一名资深的产品经理&#xff0c;今天咱们就来聊聊教育领域的一款黑科技产品——AI智慧组卷系统。在这个信息技术飞速发展的时代&#xff0c;AI技术已经渗透到了我们生活的方方面面&#xff0c;教育行业也不例外。下面我就用大白话给大家介绍一下这个AI智…

单元测试概述入门

引入 什么是测试&#xff1f;测试的阶段划分&#xff1f; 测试方法有哪些&#xff1f; 1.什么是单元测试&#xff1f; 单元测试&#xff1a;就是针对最小的功能单元&#xff08;方法&#xff09;&#xff0c;编写测试代码对其正确性进行测试。 2.为什么要引入单元测试&#x…

三、Angular 路由

一、简介 Angular 的路由服务是一个可选的服务&#xff0c;它用来呈现指定的 URL 所对应的视图。它并不是Angular 核心库的一部分&#xff0c;而是位于 angular/router 包中。像其他 Angular 包一样&#xff0c;路由服务在用户需要时才从此包中导入。 [1]. 创建路由模块 默认…

【MATLAB】绘制投资组合的有效前沿

文章目录 一、数据准备二、有效前沿三、代码3.1 数据批量读取、预处理3.2 绘制可行集3.3 绘制有效前沿3.4 其它-最大夏普率 一、数据准备 准备多个股票的的历史数据&#xff0c;目的就是找到最优的投资组合。 下载几个标普500里面的公式的股票数据吧&#xff0c;下载方法也可…

JuiceFS 2024:开源与商业并进,迈向 AI 原生时代

即将过去的 2024 年&#xff0c;是 JuiceFS 开源版本推出的第 4 年&#xff0c;企业版的第 8 个年头。回顾过去这一年&#xff0c;JuiceFS 社区版依旧保持着快速成长的势头&#xff0c;GitHub 星标突破 11.1K&#xff0c;各项使用指标增长均超过 100%&#xff0c;其中文件系统总…

重生之我在异世界学编程之C语言:枚举联合篇

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言正文枚举&#xff08;Enum&#xff0…

6 分布式限流框架

限流的作用 在API对外互联网开放的情况下&#xff0c;是无法控制调用方的行为的。当遇到请求激增或者黑客攻击的情况下&#xff0c;会导致接口占用大量的服务器资源&#xff0c;使得接口响应效率的降低或者超时&#xff0c;更或者导致服务器宕机。 限流是指对应用服务进行限制…

【Linux系列】如何使用 nohup 命令在后台运行脚本

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

门禁系统与消防报警的几种联动方式

1、规范中要求的出入口系统与消防联动 1.1《建筑设计防火规范》GB 50016-2018 1.2《民用建筑电气设计规范》JGJ 16-2008  14.4出入口控制系统 3 设置在平安疏散口的出入口限制装置&#xff0c;应与火灾自动报警系统联动;在紧急状况下应自动释放出入口限制系统&…

Express 加 sqlite3 写一个简单博客

例图&#xff1a; 搭建 命令&#xff1a; 前提已装好node.js 开始创建项目结构 npm init -y package.json:{"name": "ex01","version": "1.0.0","main": "index.js","scripts": {"test": &q…

GetMaterialApp组件的功能与用法

文章目录 1. 知识回顾2. 使用方法2.1 源码分析2.2 常用属性3. 示例代码4. 内容总结我们在上一章回中介绍了"Get包简介"相关的内容,本章回中将介绍GetMaterialApp组件.闲话休提,让我们一起Talk Flutter吧。 1. 知识回顾 我们在上一章回中已经介绍过GetMaterialApp组…

LabVIEW之树形控件

一、树形控件基本构成 树形控件这个名称非常形象&#xff0c;其如同树一样&#xff0c;是典型的分层结构。树形控件的属性和方法使用非常灵活&#xff0c;树形控件的内容既可以静态编辑&#xff0c;也可以通过编程来动态填充。静态编辑树形控件适用于内容不变的应用场景&#…