自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Linq對(duì)象引用簡單介紹

開發(fā) 后端
這里介紹Linq對(duì)象引用,實(shí)際上,通常我們是將數(shù)據(jù)從數(shù)據(jù)庫中提取出來放入另一層中,應(yīng)用程序在該層對(duì)數(shù)據(jù)進(jìn)行處理。這就是 LINQ to SQL 支持的模型。

在向大家詳細(xì)介紹Linq對(duì)象引用之前,首先讓大家了解下對(duì)象標(biāo)識(shí),然后全面介紹Linq對(duì)象引用。

對(duì)象標(biāo)識(shí)

◆運(yùn)行庫中的對(duì)象具有唯一標(biāo)識(shí)。引用同一對(duì)象的兩個(gè)變量實(shí)際上是引用此對(duì)象的同一實(shí)例。你更改一個(gè)變量后,可以通過另一個(gè)變量看到這些更改。

◆關(guān)系數(shù)據(jù)庫表中的行不具有唯一標(biāo)識(shí)。由于每一行都具有唯一的主鍵,因此任何兩行都不會(huì)共用同一鍵值。

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

對(duì)于對(duì)象。你期望在你反復(fù)向 DataContext 索取相同的信息時(shí),它實(shí)際上會(huì)為你提供同一對(duì)象實(shí)例。你將它們設(shè)計(jì)為層次結(jié)構(gòu)或關(guān)系圖。你希望像檢索實(shí)物一樣檢索它們,而不希望僅僅因?yàn)槟愣啻嗡饕粌?nèi)容而收到大量的復(fù)制實(shí)例。

在 LINQ to SQL 中,DataContext 管理對(duì)象標(biāo)識(shí)。只要你從數(shù)據(jù)庫中檢索新行,該行就會(huì)由其主鍵記錄到標(biāo)識(shí)表中,并且會(huì)創(chuàng)建一個(gè)新的對(duì)象。只要您檢索該行,就會(huì)將原始對(duì)象實(shí)例傳遞回應(yīng)用程序。通過這種方式,DataContext 將數(shù)據(jù)庫看到的標(biāo)識(shí)(即主鍵)的概念轉(zhuǎn)換成相應(yīng)語言看到的標(biāo)識(shí)(即實(shí)例)的概念。應(yīng)用程序只看到處于第一次檢索時(shí)的狀態(tài)的對(duì)象。新數(shù)據(jù)如果不同,則會(huì)被丟棄。

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

以上來自MSDN,的確,看了有點(diǎn)“正規(guī)”,下面我用兩個(gè)例子說明一下。

Linq對(duì)象引用

在第一個(gè)示例中,如果我們執(zhí)行同一查詢兩次,則每次都會(huì)收到對(duì)內(nèi)存中同一Linq對(duì)象引用。很明顯,cust1和cust2是同一個(gè)Linq對(duì)象引用。

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

下面的示例中,如果您執(zhí)行返回?cái)?shù)據(jù)庫中同一行的不同查詢,則您每次都會(huì)收到對(duì)內(nèi)存中同一Linq對(duì)象引用。cust1和cust2是同一個(gè)Linq對(duì)象引用,但是數(shù)據(jù)庫查詢了兩次。

  1. Customer cust1 = db.Customers.First(c => c.CustomerID == "BONAP");  
  2. Customer cust2 = (  
  3. from o in db.Orders  
  4. where o.Customer.CustomerID == "BONAP"  
  5. select o )  
  6. .First()  
  7. .Customer; 

【編輯推薦】

  1. LINQ to DataSet查詢詳解
  2. Linq實(shí)現(xiàn)XML轉(zhuǎn)換淺談
  3. Linq to SQL強(qiáng)類型DataContext
  4. Linq SelectMany學(xué)習(xí)經(jīng)驗(yàn)
  5. 使用LINQ進(jìn)行數(shù)據(jù)轉(zhuǎn)換剖析
責(zé)任編輯:佚名 來源: IT168
相關(guān)推薦

2009-09-08 10:50:20

2009-09-11 09:41:19

LINQ to SQL

2009-09-09 14:20:49

LINQ To Luc

2009-09-07 17:46:18

LINQ高級(jí)特性

2009-09-07 17:05:10

LINQ進(jìn)行查詢

2009-09-15 09:39:38

LINQ查詢架構(gòu)

2009-09-17 09:15:49

Linq表達(dá)式樹

2009-08-03 17:51:43

C#引用類型

2009-09-08 13:07:15

介紹Linq to S

2009-09-10 17:30:15

LINQ Where子

2009-09-16 10:38:43

LINQ查詢

2009-08-13 11:01:32

LINQPadLINQ工具

2009-09-15 15:09:50

Linq本質(zhì)

2009-09-18 09:25:06

LINQ Framew

2009-09-14 10:57:46

LINQ入門

2009-09-08 13:16:01

Linq to SQL

2009-09-09 15:28:43

Linq to obj

2009-09-15 16:26:36

Linq orderb

2009-09-18 16:00:07

LINQ架構(gòu)

2009-09-10 16:28:17

LINQ查詢
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)