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, SqlQueryRawExecuteSqlRaw 這些 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