EFCore 【Sqlite、Mysql】資料庫遷移 並使用資料庫,CodeFirst、DBFirst
通過alt+v+e+o組合鍵來喚醒程式包管理器
通過在程式包管理器控制檯中輸入指令:
get-help about_entityframeworkcore 檢視EFCore的幫助文件。
EFCore CodeFirst
EFCore 使用Sqlite資料庫遷移的步驟:
第一步:安裝依賴nuget包:
Microsoft.EntityFrameworkCore
Microsoft.EntityFrameworkCore.Sqlite
Microsoft.EntityFrameworkCore.Tools
第二步:建立DbContext,並宣告DbSet
建立控制檯專案後,建立一個DbContext的子類,把需要建立的DbSet全部宣告,並重載OnConfiguring方法,使用UseSqlite()指定資料庫連結。
第三步:使用多個遷移相關指令生成資料庫
指令1:EntityFrameworkCore\Add-Migration mysqlte 來生成遷移檔案
指令2:EntityFrameworkCore\Update-Database mysqlte 來生成具體的資料庫,sqlite.db就是生成的資料庫檔案
mysqlte為自定義名稱
第四步:
右鍵sqlite.db並在生成操作上設定為無,在複製到輸出目錄上設定屬性為始終複製,sqlite資料庫從一連線就會建立空的資料庫檔案,可以通過這個操作來覆蓋預設生成的檔案並使用。
EFCore 使用Mysql資料庫遷移的步驟:
第一步:下載需要的nuget包:
Microsoft.EntityFrameworkCore
Pomelo.EntityFrameworkCore.MySql
Microsoft.EntityFrameworkCore.Tools
第二步:建立DbContext
和sqlite一樣,但需要重新制定mysql的資料庫連結,
第三步:使用EF遷移相關的指令
指令1:EntityFrameworkCore\Add-Migration mysql
指令2:EntityFrameworkCore\Update-Database mysql
EFCore DBFirst,從資料庫中生成實體和DbContext到程式中。
輸入指令:
EntityFrameworkCore\Scaffold-DbContext "Data Source = localhost; Database = mydb; User ID = username; Password = mypwd; SslMode = None;" "Pomelo.EntityFrameworkCore.MySql"
第一坑
在建立資料庫時,有時候會需要一個建立時間欄位,且這個欄位預設是當前時間,在資料庫中定義好後,使用上述命令,生成實體到程式中時,在DbContext 的 OnModelCreating 過載方法中會出現生成不準確的問題,比如會在時間預設值左右加上單引號,導致資料庫再更新遷移到資料庫時建立表出錯,去掉單引號可解決這個問題,如下圖