iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 27
0

在 .NET 開發環境中
應使用 EntityFramework 還是 ADO.NET 存取資料庫一直是個爭論不休的議題

列出之前使用 EntityFramework 遇到的問題

  • 建立過長的查詢字串:超過 8000 行
  • 所有的文字欄位型態皆為 NVARCHAR(MAX)
  • 特定情境中,會將所有資料表內容全部讀取出來之後才會進行操作

例:將 Product 與 ProductInventory 全部讀取出來後再進行 join 取得需要的資料 (!?)

雖上述條件對資料庫而言會產生很巨大的成本
但不應上述條件就斷定 EntityFramework 不是一個很好的工具,應該捨棄不使用

就如同索引的概念:使用空間換取時間
並且應詳細了解該工具提供的功能與限制

因為:就算有好的工具但你不了還是會有問題

Entity Framework Core 處理複雜查詢

可使用檢視表 (View) 來達成

EF Core 版本使用 Scaffold-DbContext 工具依舊不會產生 View 的物件繫結

使用 ToView 方法搭配 Lambda 可以自動產生篩選語法

範例

DbContext.ViewForProductList.Where(x => x.Name == "Product").ToList()

/* 產生的 SQL 語法 */
SELECT *
FROM [dbo].[ViewForProductList]
WHERE [Name] == 'Product' --此片段是 Entity Framework Core 自動補上

參考資料

https://docs.microsoft.com/zh-tw/ef/core/modeling/query-types

結論

使用 EntityFramework 還是要去確認產生的 SQL 語法還是比較好的


上一篇
在一次的呼叫下進行一對多資料表存取
下一篇
使用 EntityFramework CodeFirst 注意事項
系列文
SQL Server 資料庫程式設計/管理/經驗筆記30

尚未有邦友留言

立即登入留言