iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0

分享主軸

  • EF Core 是什麼 ?
  • 變更追蹤機制是什麼 ?

EF Core

發行背景 : NET Core 1.0 於 2016 年 6 月 27 日正式發行後,EF Core 也推出,但它並沒有完全傳統的 Entity Framework,而是為了 .NET Core 設計的一套 ORM 框架

ORM : 在物件與關聯式資料庫中的資料之間做一個轉換(讓我們可以用物件導向的思維來存取關聯式資料庫內的內容)

  • 常見關聯式資料庫為 MySQL、Microsoft SQL Server、Oracle Database ...等等

與其他資料庫溝通的工具差異 :

  • 以物件導向概念設計,讓我們可以使用物件來表示和操作資料庫中的資料,而不需要直接寫 SQL 語句
  • 內建變更追蹤機制,自動跟蹤實體的狀態變化,簡化資料庫操作
  • ORM 的概念 (補充 : 像是 Dapper 算是一個微型 ORM)

變更追蹤概念

詳細說明一下它的原理

  • 當使用 EF Core 時,它會轉成 SQL 語法進 DB 動作,這時候 DB 返回的結果,會載入 EF 的記憶體內,形成一份正本,然後複製一份,變成副本,返回給 AP 層使用,在 AP 層,開發者可以對這些副本資料進行各種操作,例如 : 修改某些欄位的值,這些修改僅影響副本,不會立即反映到資料庫中,當呼叫 SaveChanges() 方法時,EF會將這些副本與正本進行比對,找出哪些資料發生了變更,以及具體變更了哪些欄位,EF 根據變更偵測的結果,生成相應的 SQL 更新語法,將變更應用到資料庫中,最後,EF 執行這些生成的 SQL 語法,將變更寫回資料庫,完成資料更新操作

在 EF Core 中,使用 LINQ 查詢可以有效防止 SQL 注入攻擊,這是因為 EF Core 會自動生成參數化的 SQL 語句

潛在的問題

  1. 某些 EF Core 提供的方法,寫不好,可能會導致 SQL 注入攻擊,如 FromSqlRaw()
var userQuery = context.Users.FromSqlRaw("SELECT * FROM Users WHERE Name = '" + userInput + "'");

參考文章 :
https://learn.microsoft.com/en-us/ef/core/querying/sql-queries?glarity_translate=1&tabs=sqlserver

  1. 並發衝突 : 當多個用戶同時修改同一條記錄時,可能會發生並發衝突,導致資料不一致等問題
  2. 大量使用 Eager Loading 來加載資料數據

簡單統整今日重點

  • EF Core 為一套非常強大的ORM的框架,ORM為物件與關聯式資料庫之間做對映
  • 了解組態內變更追蹤代表的真正意思

今日結語
今天分享了 ASP .NET Core EF Core,分享到現在,對 ASP .NET Core 運作更加了解了,不會只是會寫出功能,而不太懂原理,死記程式碼了

每天累積一點,明日繼續加油 ~~


上一篇
Day 13 Logging : 系統基本、輸出、錯誤資訊可以怎麼紀錄 ?
下一篇
Day 15 Swagger : 撰寫 API 文件
系列文
靠近 ASP .NET Core 一點點27
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言