2023年11月2日 星期四

EF Core DBFirst

Entity Framework 的另一個起手式為 db first,相較於code first 能將既有的資料表快速產出對應的Models 

雛形,若資料表有相關更新,也可以透過工具來更新Models



以下分別使用 visual studio 與 rider 操作

VisualStudio


測試專案使用 Console 類型


首先使用 Nuget Package Console 安裝相關套件


Install-Package Microsoft.EntityFrameworkCore.SqlServer

Install-Package Microsoft.EntityFrameworkCore.Tools



接著再利用 Scaffold-DbContext 來產生 POCO,同樣在 console 輸入以下語法,其中 Server、User Id、

Password 參數,依據實際環境輸入即可


Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=TestDb;User Id=##; password=####;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models


若是使用 windows 驗證,同樣調整為以下內容


Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=LabEmployee;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models


實際執行後,會在專案自動建立 Models 資料夾,並且建立與資料庫對應的 Table 名稱類別檔案




觀察 TestDbContext.cs 檔案,這個檔案是對應 DB 名稱自動產生的,其中內容會有連線字串與相關

的 DbSet Properties,還有 ModelCreating() 方法


由於程式在使用時,資料庫連線字串一般會隨著環境設定,不會也死在程式中,故需要將連線設定調整一下

首先先將 TestDbContext 檔案中的連線參數註解起來,如下圖



接著新增 appsetings.json 檔案,並且撰寫內容


接著調整檔案屬性,需要複製到輸出目錄


再來安裝 Microsoft.Extensions.Configuration.Json 套件



開啟 Program.cs 檔案,撰寫以下內容


輸出結果


Rider

同樣的安裝相關套件,由於 rider 沒有Nuget Package Console ,所以使用 Manager 安裝即可,

須注意,這邊安裝的版本皆為當下穩定的版本 7.0.9,而非 8.x 的 preview 版本


Microsoft.EntityFrameworkCore.SqlServer

Microsoft.EntityFrameworkCore.Tools

Microsoft.Extensions.Configuration.Json


而Scaffold 產生 POCO 的部分,在Rider 則需要使用對應工具設定,如下圖

Tools → Entity Framework Core → Scaffold DbContext


點選後開啟視窗,相關欄位輸入相關參數值


而DbContext 則可以設定名稱,不用跟隨 DB Name,設定方式切換到 DbContext 頁籤


點選「OK」按鈕則會跑建置,並且呈現在 EFCore 訊息視窗


專案視窗並且產生對應的檔案


接著來修改 DbContext.cs 檔案的資料庫連線,首先註解 OnConfiguring() 方法


新增 appsettings.json 檔案,並且輸入內容,以及設定輸出複製




撰寫 Program.cs 檔案內容


輸出結果


透過 .NET Core CLI 設定 scaffold


前面提過 rider 沒有 nuget package console ,但是可以透過 .net core cli 來幫助我們達到,

而透過.net core cli指令就不受限開發工具的環境。


開啟命令提示字元,並且切換到專案資料夾,並且輸入 dotnet –version 確認版本


再安裝 EF Core 命令列工具(dotnet ef 不再包含於 .NET Core SDK 裡須額外安裝),安裝指令為

dotnet tool install --global dotnet-ef


安裝 ef tool 後,可以使用 dotnet ef 來看目前本機版本



輸入以下指定

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=dbname;User Id=user; password=***" Microsoft.EntityFrameworkCore.SqlServer -o Models



執行後


專案產生對應的檔案




指定 Scaffold 輸出特定的資料表

nuget package console


Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=dbname;User Id=user; password=**;" Microsoft.EntityFrameworkCore.SqlServer -Tables Students,Orders


dotnet cli

dotnet ef dbcontext scaffold "Server=(localdb)\mssqllocaldb;Database=dbname;User Id=user;password=**;”

Microsoft.EntityFrameworkCore.SqlServer –schema Students,Orders



【參考】

沒有留言:

張貼留言