程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> LINQ to SQL語句(16)之對象標識

LINQ to SQL語句(16)之對象標識

編輯:關於.NET

對象標識

運行庫中的對象具有唯一標識。引用同一對象的兩個變量實際上 是引用此對象的同一實例。你更改一個變量後,可以通過另一個變量看到這些更 改。

關系數據庫表中的行不具有唯一標識。由於每一行都具有唯一的主 鍵,因此任何兩行都不會共用同一鍵值。

實際上,通常我們是將數據從 數據庫中提取出來放入另一層中,應用程序在該層對數據進行處理。這就是 LINQ to SQL 支持的模型。將數據作為行從數據庫中提取出來時,你不期望表示 相同數據的兩行實際上對應於相同的行實例。如果您查詢特定客戶兩次,您將獲 得兩行數據。每一行包含相同的信息。

對於對象。你期望在你反復向 DataContext 索取相同的信息時,它實際上會為你提供同一對象實例。你將它們 設計為層次結構或關系圖。你希望像檢索實物一樣檢索它們,而不希望僅僅因為 你多次索要同一內容而收到大量的復制實例。

在 LINQ to SQL 中, DataContext 管理對象標識。只要你從數據庫中檢索新行,該行就會由其主鍵記 錄到標識表中,並且會創建一個新的對象。只要您檢索該行,就會將原始對象實 例傳遞回應用程序。通過這種方式,DataContext 將數據庫看到的標識(即主鍵 )的概念轉換成相應語言看到的標識(即實例)的概念。應用程序只看到處於第 一次檢索時的狀態的對象。新數據如果不同,則會被丟棄。

LINQ to SQL 使用此方法來管理本地對象的完整性,以支持開放式更新。由於在最初創建對象 後唯一發生的更改是由應用程序做出的,因此應用程序的意向是很明確的。如果 在中間階段外部某一方做了更改,則在調用 SubmitChanges() 時會識別出這些 更改。

以上來自MSDN,的確,看了有點“正規”,下面我用 兩個例子說明一下。

對象緩存

在第一個示例中,如果我們執行同一查 詢兩次,則每次都會收到對內存中同一對象的引用。很明顯,cust1和cust2是同 一個對象引用。

Customer cust1 = db.Customers.First(c => c.CustomerID == "BONAP");
Customer cust2 = db.Customers.First(c => c.CustomerID == "BONAP");

下面的示例中,如果您執行返回數據庫中同一 行的不同查詢,則您每次都會收到對內存中同一對象的引用。cust1和cust2是同 一個對象引用,但是數據庫查詢了兩次。

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;

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved