DataContext 內永遠對應同一個物件實例。DataContext 內部維護身分表,以主鍵為鍵追蹤已載入實體。首次查詢建立物件並登記;後續查詢同一主鍵直接回傳快取實例,忽略資料庫最新值(除非呼叫 Refresh)。
Customer cust1 = db.Customers.First(c => c.CustomerID == "BONAP");
Customer cust2 = db.Customers.First(c => c.CustomerID == "BONAP");
// cust1 與 cust2 參考同一實例
Console.WriteLine(Object.ReferenceEquals(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 仍為同一實例
確保物件圖一致性、支援開放式並發控制:只有應用程式主動修改才會改變物件狀態,外部資料庫變更會在 SubmitChanges 時偵測衝突。