EF9 DB first 紀錄

EF Core 9 Database First / DB First (Entity Framework Core 9 / .NET 9)

§ 引言

EF9 好像有點不一樣。久違了試看看。

也看一下上次的測試。

EF Core 8 DbContext Scaffold 練習

§ 關鍵步驟 - 安裝套件

# 在目標軟體專案 (csproj) 安裝 NuGet 套件
Microsoft.EntityFrameworkCore 9.0.8
Microsoft.EntityFrameworkCore.Tools 9.0.8
Microsoft.EntityFrameworkCore.SqlServer 9.0.8 

§ 關鍵步驟 - 自DB 生成 schema (scaffold)

需在『套件管理主控台』 執行 PowerShell 的 Scaffold-DbContext 指令。 設定參數 -DataAnnotations 才會標註屬性。之前沒設以為沒此能力。 參數 -Force 強製複寫檔案。

可以用 "Name=指定 appSettings.json 的連線字串" ,可惜沒有成功。

PM> Scaffold-DbContext "Name=ConnectionStrings:DefaultConnection" Microsoft.EntityFrameworkCore.SqlServer -ContextDir Data -OutputDir Schema -DataAnnotations -Force

直接指定連線字串就成功了。

PM> Scaffold-DbContext "Data Source=192.168.0.xxx;Initial Catalog=YOUR_DBNAME;Integrated Security=True;Encrypt=False" Microsoft.EntityFrameworkCore.SqlServer -ContextDir Data -OutputDir Schema -DataAnnotations -Force

應該也可以用 dotnet cli (此例未測試)

> dotnet ef dbcontext scaffold "Data Source=192.168.0.xxx;Initial Catalog=YOUR_DBNAME;User ID=sa;Password=********;Encrypt=False;" Microsoft.EntityFrameworkCore.SqlServer --context-dir Data --output-dir Schema

§ 關鍵步驟 - 在 Program.cs 註冊你的 DbContext

builder.Services.AddDbContext<YourDbContext>();

註冊後就可以 DI 注入 "YourDbContext"。

§ 測試 SqlQuery 與 FromSql

var bidder = _dbctx.Bidders.FromSql($"SELECT * FROM Bidder WHERE BidderNum = {id}").FirstOrDefault();
var bidder = _dbctx.Database.SqlQuery<Bidder>($"SELECT * FROM [Bidder] WHERE BidderNum = {id}").FirstOrDefault();

§ 小結

就個人使用經驗並沒有大的改變。

這次實際試用 SqlQuery 與 SqlQueryRaw 來評估。 新增加的 SqlQuery 與 SqlQueryRaw 只是輔助的而已。 主要還是透過 DbSet 也就是 LINQ to SQL 存取。 當然也可以特例操作!這招本人並不建議。 現階段還是用回 Dapper 吧。 因為 Linq-to-SQL 產生的 SQL 實在無法苟同

§ 參考文件

Scaffold-DbContext 指令

的主要查看 FromSql, FromSqlRaw, SqlQuery, SqlQueryRaw 的異同。

Last updated