首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> 關於ASP.NET

LINQ to SQL 物件身分識別與載入機制深度解析(12):DataContext 身分對應表、快取行為與開放式並發基礎

     編輯:關於ASP.NET

理解 LINQ to SQL 如何在物件層級維護「身分識別」,是掌握變更追蹤與開放式並發的基石。

核心觀念:資料列 ≠ 物件實例

  • 資料庫:主鍵唯一識別資料列,無「實例」概念
  • 物件:參考相同實例即為相同身分,修改可透過任一參考觀察

DataContext 透過身分對應表橋接兩者:

  1. 首次查詢 → 依主鍵檢查快取 → 無則建立新實體並登記
  2. 後續查詢相同主鍵 → 直接回傳快取實體(不重新載入資料)
  3. 外部資料庫異動 → 僅在 SubmitChanges() 時偵測衝突

驗證範例

同一查詢兩次

Customer cust1 = db.Customers.First(c => c.CustomerID == "BONAP");
Customer cust2 = db.Customers.First(c => c.CustomerID == "BONAP");
// cust1 == cust2 為 true,同一實例

不同查詢路徑取得相同實體

Customer cust1 = db.Customers.First(c => c.CustomerID == "BONAP");
Customer cust2 = (from o in db.Orders
                  where o.Customer.CustomerID == "BONAP"
                  select o).First().Customer;
// cust1 == cust2 為 true,雖查詢資料庫兩次

設計意涵

  • 保證物件圖一致性:同一實體在記憶體中僅存在單一實例
  • 支援開放式並發:原始值保留於實體,SubmitChanges 時比較資料庫現值
  • 避免重複載入:第二次查詢雖發 SQL,但資料捨棄,回傳快取實體
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved