前言 最近打算用.NET Core寫一份簡單的後臺系統,來練練手 然後又用到了Entity Framework Core 發現園子里有些文章講得不是那麼細節,對於新手小白來說,可能會有點懵。 特意整理了幾個細節. 正文 數據遷移 首先EF CORE跟以前的EF6是有不同點的, 微軟官網列出的不同點: ...
前言
最近打算用.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 這個腳本可以自定義需要遷移的版本號.文件名,需要生成遷移腳本的上下文