EF Core 8 DbContext Scaffold 練習
引言
試著由 DB 生成 Schema。
參考文件
找不到 EF8 的入門教學。不過 EF6 入門教學一樣有效。EF6 教學 Entity Framework Core for Beginners
關鍵步驟 - 安裝套件
在目標軟體專案 (csproj) 安裝 nu-get 套件
[Microsoft.EntityFramworkCore.SqlServer]
[Microsoft.EntityFramworkCore.Design]
[Microsoft.EntityFramworkCore.Tools]
關鍵步驟 - 自DB 生成 schema
用 PowerShcll 指令 (但沒有成功過)
PM> Scaffold-DbContext "Data Source=192.168.0.xxx;Initial Catalog=YOUR_DBNAME;User ID=sa;Password=********;Encrypt=False;" Microsoft.EntityFrameworkCore.SqlServer -ContextDir Data -OutputDir Models
用 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
先小結
生成效果不滿意!!! 覺得很冏!!! 覺得退步了!!! 無言啊!!!
舊有 .NET Framework 版本的 EF6 所生成的 schema (data table) class 會在 PK 或 Identity 欄位宣告上直接標註。這一點在 EF Core 的行為改變了。
EF Core 是更傾向於 "Code First" 的行為來設計,只是順便也支援 "Database First"。 經查看 EF Core 的 DbContext Scaffold 生成的資訊改放在 DbSet 的宣告中而不是不見了! 或許該改變的是我們的視角。而不是堅持以舊的基礎舊的價值舊來看待 EF Core 的新設計面。
在 EFCore 8 也開始支援 SqlQuery
, SqlQueryRaw
與 ExecuteSqlRaw
這些 native 指令。終於可以擺脫 LinqToSQL 這個不倫不類的怪胎。
不過 EFCore 8 還不確定可否完全禁用 LinqToSQL。需再評估。
另有新指令AsNotTracking()
停用變更追縱。應該預設為停用追縱才對。
另外 AI 說若設定組態 ProxyCreationEnabled = false
會讓 LinqToSQL 失效! 這要試過才能確定。
context.Configuration.ProxyCreationEnabled = false;
經閱讀文章 ProxyCreationEnabled = flase 並不會關閉 LinqToSQL 只是把自動進一步抓取(沒用到的)資料的機制關閉而已。
在不能關閉 linqToSQL 能力前實在不想用 EFCore 啊!!! 或許EFCore 10 會願意提供關閉 LinqToSQL 的方法。
參考文章
(EOF)
Last updated