ASP.NET Core 8.0學習筆記(二十七)——數據遷移:Migrations深入與其他遷移命令

一、數據庫架構的管理

1.EF Core提供兩種方式來保持EF Core的模型與數據庫保持同步。
(1)以數據庫為準:反向工程(Db First),適用于中大型工程
(2)以代碼為準:數據遷移(Code First),適用于小型工程
2.關于Nuget包:Microsoft.EntityFrameworkCore.Design:常用于反向工程 Tools:數據遷移
3.遷移方式:
(1)當引入的數據模型更改時,添加遷移操作時,EF Core將當前模型與舊模型的快照進行比較,確定差異并生成遷移源文件
注意:主要是比較模型類與模型配置類(IEntityTypeConfiguration接口實現類以及DbContext類)修改前后的差異(修改前的代碼保存在快照當中),然后生成對應的遷移腳本
(2)生成新的遷移后,遷移的記錄將保存在Migration文件夾中。EF也將在數據庫中記錄所有的遷移變化

二、深入研究Migrations中的兩個方法

1.獲取Migrations腳本:新建實體類與配置類,以及DbContext,然后執行數據庫遷移指令,觀察生成的數據庫腳本:
實體模型:
在這里插入圖片描述

配置類:
在這里插入圖片描述

數據庫上下文類:
在這里插入圖片描述

執行數據庫遷移指令:
在這里插入圖片描述

生成的Migration腳本如下:
在這里插入圖片描述

2.引入概念:
(1)向上遷移、向下遷移:使用遷移腳本,可以對當前連接的數據庫執行編號更高的遷移,這個操作叫做向上遷移(Up),也可以執行將數據庫回退到舊的遷移,這個操作稱為“向下遷移”。
(2)注:除非有特殊需要,否則不要刪除Migrations文件夾下的代碼(回退數據庫版本使用)
3.代碼分析:
(1)根目錄下的文件
在這里插入圖片描述

(2)Intial.cs的Up與Down方法:
Up:生成這張表或執行更新操作所需要的代碼腳本
Down:回退當前操作所需要執行的代碼
在這里插入圖片描述

若在實體中添加一個屬性Height,同樣執行數據庫遷移命令,生成的腳本如下:
在這里插入圖片描述

注意,在生成的數據庫中會有一張表,用于記錄Migration記錄,若隨意刪除則會報錯。
4.但是Migration文件夾中的文件也不是一定不能刪除。一般情況下只需要將生成的數據庫整個刪除以后,再刪掉Migrations文件夾即可。此時重新運行Add-Migration命令以及update-database就不會出現任何問題。(因為快照等都被刪除了,等于重新開始建庫)
三、其他的Migration遷移指令
1.Update-Database XXX:將數據庫回滾到XXX的狀態,遷移腳本不動
在這里插入圖片描述

將數據庫回滾到Initial狀態
2.刪除最后一次的遷移腳本:Remove-Migration
在這里插入圖片描述

3.Script-Migration:生成遷移Sql代碼。Update-Database可以更新數據庫,執行該命令可以生成SQL的更新腳本,手動更新數據庫,有利于DBA對數據庫進行管理以及恢復。
在這里插入圖片描述

五、重置遷移

1.若需要重置所有遷移,但是又需要保留測試數據,可以按照以下方法操作:
(1)刪除Migrations文件夾
(2)刪除對應數據庫中__EFMigrationsHistory表中的數據(不是刪除表,只是清除數據)
(3)創建新的遷移并為其生成SQL腳本
(4)在數據庫的遷移記錄表(__EFMigrationsHistory)中插入一行,以記錄剛才的遷移已經應用
2.示例:
(1)刪除Migrations文件夾,重新執行Migration:
在這里插入圖片描述

(2)刪除數據庫中的__EFMigrationHistory表中的數據
(3)將遷移的腳本所產生的數據直接插進遷移記錄表中:(相當于手動執行update-database)
在這里插入圖片描述

(4)修改一下代碼,重新應用遷移:將People表的Name屬性的最大長度由50改為64:
在這里插入圖片描述

查看數據庫:
在這里插入圖片描述

且其他表的數據都沒有受到影響。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71722.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71722.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71722.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Python 基本語法的詳細解釋

目錄 (1)注釋 (2)縮進 (3)變量和數據類型 變量定義 數據類型 (4)輸入和輸出 輸出:print() 函數 輸入:input() 函數 (1)注釋 注…

20-R 繪圖 - 餅圖

R 繪圖 - 餅圖 R 語言提供來大量的庫來實現繪圖功能。 餅圖,或稱餅狀圖,是一個劃分為幾個扇形的圓形統計圖表,用于描述量、頻率或百分比之間的相對關系。 R 語言使用 pie() 函數來實現餅圖,語法格式如下: pie(x, l…

Ubuntu 22.04 一鍵部署MinerU1.1.0

MinerU MinerU是一款將PDF轉化為機器可讀格式的工具(如markdown、json),可以很方便地抽取為任意格式。 MinerU誕生于書生-浦語的預訓練過程中,我們將會集中精力解決科技文獻中的符號轉化問題,希望在大模型時代為科技發…

紫光同創開發板使用教程(二):sbit文件下載

sbit文件相當于zynq里面的bit文件,紫光的fpga工程編譯完成后會自動生成sbit文件,因工程編譯比較簡單,這里不在講解工程編譯,所以我這里直接下載sbit文件。 1.工程編譯完成后,可以看到Flow列表里面沒有報錯&#xff0c…

DeepSeek 部署全指南:常見問題解析與最新技術實踐

引言 隨著開源大模型DeepSeek的爆火,其部署需求激增,但用戶在實際操作中常面臨服務器壓力、本地部署性能瓶頸、API配置復雜等問題。本文結合2025年最新技術動態,系統梳理DeepSeek部署的核心問題與解決方案,并分享行業實踐案例&am…

Vue02

Vue02 綁定class樣式 字符串寫法,適用于:樣式的類名不確定,需要動態指定 數組寫法,適用于:要綁定的樣式個數不確定,名字也不確定 對象寫法,適用于:要綁定的樣式個數缺點&#xff…

超導量子計算機的最新進展:走向實用化的量子革命

超導量子計算機的最新進展:走向實用化的量子革命 大家好,我是 Echo_Wish,今天我們來聊聊科技圈最炙手可熱的話題之一——超導量子計算機。近年來,量子計算領域可謂是風起云涌,而超導量子計算機作為主流路線之一,已經在學術界和工業界取得了不少突破性進展。 那么,超導…

LangChain構建行業知識庫實踐:從架構設計到生產部署全指南

文章目錄 引言:行業知識庫的進化挑戰一、系統架構設計1.1 核心組件拓撲1.2 模塊化設計原則二、關鍵技術實現2.1 文檔預處理流水線2.2 混合檢索增強三、領域適配優化3.1 醫學知識圖譜融合3.2 檢索結果重排序算法四、生產環境部署4.1 性能優化方案4.2 安全防護體系五、評估與調優…

Node.js中如何修改全局變量的幾種方式

Node.js中如何修改全局變量。我需要先理解他們的需求。可能他們是在開發過程中遇到了需要跨模塊共享數據的情況,或者想要配置一些全局可訪問的設置。不過,使用全局變量可能存在一些問題,比如命名沖突、難以維護和測試困難,所以我得…

【Node.js】express框架

目錄 1初識express框架 2 初步使用 2.1 安裝 2.2 創建基本的Web服務器 2.3 監聽方法 2.3.1 監聽get請求 2.3.2 監聽post請求 2.4 響應客戶端 2.5 獲取url中的參數(get) 2.5.1 獲取查詢參數 2.5.2 獲取動態參數 2.6 托管靜態資源 2.6.1 掛載路徑前綴 2.6.2 托管多…

Vulhub靶機 Apache Druid(CVE-2021-25646)(滲透測試詳解)

一、開啟vulhub環境 docker-compose up -d 啟動 docker ps 查看開放的端口 1、漏洞范圍 在Druid0.20.0及更低版本中 二、訪問靶機IP 8888端口 1、點擊Load data進入新界面后,再點擊local disk按鈕。 2、進入新界面后,在標紅框的Base directory欄寫上…

【c語言】函數_作業詳解

前言&#xff1a; 對應鵬哥專升本c語言&#xff0c;51集 內容&#xff1a; 找出10個數值中的最大值&#xff0c; #include <stdio.h> //求10個整數中的最大值 int main() {//準備10個整數 //int arr[10] {1,2,3,4,13,6,7,8,9,-2};//用于循環10次int i 0;//也可以自…

計算機網絡之路由協議(自治系統)

一、自治系統&#xff08;AS&#xff09; 自治系統是由同一個技術管理機構管理、使用統一選路策略的一些路由器的集合。它是網絡的基本構成單位&#xff0c;每個自治系統是一個獨立運營并自主決定與誰交換流量的實體。自治系統內部運行內部網關協議&#xff08;IGP&#xff09…

【Unity】Unity clone 場景渲染的燈光貼圖異位問題

Unity clone 場景渲染的燈光貼圖異位問題 問題 需要將一個場景clone 一份保存到本地 當克隆完成后&#xff0c;副本場景的燈光貼圖異位了&#xff0c;與原場景存在較大的差別 問題原因 場景被clone 后&#xff0c;場景的燈光渲染數據不能共用&#xff0c;即Lightmapping.li…

Python----數據分析(Numpy一:numpy庫簡介,與list列表的區別,數組的創建,隨機數組的創建)

一、 Numpy庫簡介 1.1、概念 NumPy(Numerical Python)是一個開源的Python科學計算庫&#xff0c;旨在為Python提供 高性能的多維數組對象和一系列工具。NumPy數組是Python數據分析的基礎&#xff0c;許多 其他的數據處理庫&#xff08;如Pandas、SciPy&#xff09;都依賴于Num…

千峰React:函數組件使用(2)

前面寫了三千字沒保存&#xff0c;恨&#xff01; 批量渲染 function App() {const list [{id:0,text:aaaa},{id:1,text:bbbb},{id:2,text:cccc}]// for (let i 0; i < list.length; i) {// list[i] <li>{list[i]}</li>// }return (<div><…

Hot100 動態規劃

動態規劃 動規五部曲&#xff1a; 確定dp數組以及下標的含義確定遞推公式dp數組如何初始化確定遍歷順序舉例推導dp數組 70. 爬樓梯 - 力扣&#xff08;LeetCode&#xff09; 爬到第一層樓梯有一種方法&#xff0c;爬到二層樓梯有兩種方法。 那么第一層樓梯再跨兩步就到第三…

Rust語言基礎知識詳解【一】

1.在windows上安裝Rust Windows 上安裝 Rust 需要有 C 環境&#xff0c;以下為安裝的兩種方式&#xff1a; 1. x86_64-pc-windows-msvc&#xff08;官方推薦&#xff09; 先安裝 Microsoft C Build Tools&#xff0c;勾選安裝 C 環境即可。安裝時可自行修改緩存路徑與安裝路…

文章精讀篇——OMG-Seg

題目&#xff1a;OMG-Seg : Is One Model Good Enough For All Segmentation? 作者&#xff1a;Xiangtai Li1 ? Haobo Yuan1 Wei Li1 Henghui Ding1 Size Wu1 Wenwei Zhang1Yining Li2 Kai Chen2 Chen Change Loy1 代碼&#xff1a;OMG-Seg 會議&#xff1a;cvpr2024 邊讀…

vite 開啟 gzip壓縮

使用vite 如何開啟 gzip壓縮 文章目錄 使用vite 如何開啟 gzip壓縮1. 引言為什么需要 Gzip 壓縮&#xff1f;Gzip 壓縮的作用 2. Vite 項目中的 Gzip 壓縮Vite 的基本概念Gzip 壓縮的原理 3. 使用 Vite 插件開啟 Gzip 壓縮安裝 vite-plugin-compression配置 vite-plugin-compre…