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
【參考】
沒有留言:
張貼留言