前言
最近打算用.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 這個腳本可以自定義需要遷移的版本號.文件名,需要生成遷移腳本的上下文