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
Program.cs 註冊你的 DbContextbuilder.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