2023年11月2日 星期四

EF Core DBFirst 如何更新異動的資料表

之前文章有討論到 EF Core DBFirst 如何使用,若未來資料表有相關異動,又該如何更新 Entities

與DbContext,以及能否做到指定的資料表更新即可



首先我們在資料庫建立資料表 Persons



開發工具安裝相關套件

  • Microsoft.EntityFrameworkCore.SqlServer

  • Microsoft.EntityFrameworkCore.Tools

  • Microsoft.Extensions.Configuration.Json



再來透過 dotnet 命令字元建立 model 以及 dbcontext,並且指定輸出目錄


dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=dbname;User Id=user; password=***" Microsoft.EntityFrameworkCore.SqlServer --output-dir Entities --context-dir Context



建置完成後,檢視方案總管,可以看到多了兩個資料夾以及相關檔案


值得一提的是,當執行指令完成時,會出現黃色的提醒字串,大意是說, 資料庫連線字串應該透過

設定檔來處理,相當貼心,之前文章也有介紹如何將連線字串透過設定檔讀取


產生的DbContext.cs 檔案會自動產生連線字串


我們知道黃色字串的用意,之後若不想再看到這樣的訊息呢?可以使用 –no-onconfiguring 指令


產生的DbContext.cs 檔案就「沒有連線字串」


資料表Schema 有相關異動或新增Table,需要同步 Model 的部分其實只要同樣指令後面加入 –force 即可

該指令會重新產生 Context和Model覆蓋掉原本的


dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=dbname;User Id=user; password=***" Microsoft.EntityFrameworkCore.SqlServer --output-dir Entities --context-dir Context –force

例如我們新增欄位 「CellPhone」



執行指令後,Person.cs 與 DbContext 皆有修改


Person.cs


DbContext.cs



若是使用 nuget 套件管理,指令可以參考

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=TestDb;User Id=**;password=t***" Microsoft.EntityFrameworkCore.SqlServer -outputdir Entities -contextDir Context -force


以上打完收工


沒有留言:

張貼留言