1. 程式人生 > >ASP.NET CORE系列【六】Entity Framework Core 之數據庫遷移

ASP.NET CORE系列【六】Entity Framework Core 之數據庫遷移

snapshot 文章 src AD data 上下 ont pre 發生

前言

最近打算用.NET Core寫一份簡單的後臺系統,來練練手

然後又用到了Entity Framework Core

發現園子裏有些文章講得不是那麽細節,對於新手小白來說,可能會有點懵。

特意整理了幾個細節.

正文

數據遷移

首先EF CORE跟以前的EF6是有不同點的,

微軟官網列出的不同點:https://docs.microsoft.com/zh-cn/ef/efcore-and-ef6/features

安裝 EF 核心 NuGet 包

若要使用 EF 核心,請為你想要使用的數據庫提供程序安裝 NuGet 包。 例如,如果目標 SQL Server,你將安裝Microsoft.EntityFrameworkCore.SqlServer

如果你打算使用遷移,則還應安裝Microsoft.EntityFrameworkCore.Tools包。

Install-Package Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.Tools

註意:下面的講解有一部分在前面的文章有出現過,為了照顧沒有讀前面文章的同學,代碼就簡單的貼出來。不多做講解

首先新建一個 Model 類 SysUser:

技術分享圖片

然後建立EFCoreContext類

技術分享圖片

自動創建數據庫

技術分享圖片

此時我們的數據庫 和數據都已經有了

技術分享圖片

數據遷移

此時重點來了,當我們已經有數據庫表的時候,我們需要修改字段,如何進行遷移

首先打開VS->工具->NuGet包管理器->程序包管理控制臺

輸入命令:Add-Migration init(執行此命令項目生成一個目錄(Migration))

技術分享圖片

我們會發現Model程序集下多了一個文件夾為Migrations裏面有3個文件.如下:

技術分享圖片

xxxxxxx_init.cs主遷移文件。包含應用遷移(in Up())和恢復(in Down())所需的操作。

xxxxxxx_init.Designer.cs - 遷移元數據文件。包含EF使用的信息。

EFCoreContextModelSnapshot.cs - 當前模型的快照。主要用於確定添加下一次遷移時發生了哪些變化.

然後我們執行命令:

Update-Database

如果你的數據庫沒創建,是第一次,就會執行成功,


如果你前期創建過數據庫.但是是第一次創建遷移..就會失敗

技術分享圖片

果然報錯了,提示我們的表結構已經存在了,

我們看看xxxxxx_init.cs文件:

技術分享圖片

可以看到,這裏第一次生成的遷移方法是按照新增來遷移的..而不是修改。

我們把Up() Down()裏面的代碼刪掉

技術分享圖片

這樣就相當於 本次的遷移,沒有做任何操作。

然後我們來創建真正的遷移版本:

首先添加一個Email字段,然後把UserName的長度改為60

技術分享圖片

然後我們開始遷移..

Add-Migration x2 (這裏是遷移版本名稱,可自定義,可以根據版本回滾)

成功創建遷移文件之後,我們更新數據庫.

Update-Database x2

然後Email字段加上了,UserName長度也修改了,UserName的數據也還在。

技術分享圖片

刪除遷移

的時候我們剛剛創建了一個遷移,還沒應用到數據庫,就發現自己需要變更實體.那我們就可以刪除這個沒有應用的遷移版本.

執行命令如下:

Remove-Migration

註意,這裏是沒有應用過的遷移,可以刪除.如果應用過了.則會收到錯誤信息

遷移回滾

有些時候,我們需要回滾到之前的一個遷移版本.,比如我們部署的時候,開發版本和穩定版本肯定不一樣..

那麽我們就會用到回滾命令.

執行如下:

Update-Database 這裏填寫需要回滾的版本名稱

我們執行 Update-Database init

然後我們會發現, x2中的長度已經回到30了,Email字段也沒有了....

技術分享圖片

生成遷移SQL

有的時候,我們的生產數據庫,是需要用腳本來創建庫的.所以我們也可以直接通過實體來生成SQL腳本.命令如下:

Script-Migration

技術分享圖片

舉一反三:Script-Migration x2 這個腳本可以自定義需要遷移的版本號.文件名,需要生成遷移腳本的上下文

ASP.NET CORE系列【六】Entity Framework Core 之數據庫遷移