Linq对象引用简单介绍

开发 后端
这里介绍Linq对象引用,实际上,通常我们是将数据从数据库中提取出来放入另一层中,应用程序在该层对数据进行处理。这就是 LINQ to SQL 支持的模型。

在向大家详细介绍Linq对象引用之前,首先让大家了解下对象标识,然后全面介绍Linq对象引用。

对象标识

◆运行库中的对象具有唯一标识。引用同一对象的两个变量实际上是引用此对象的同一实例。你更改一个变量后,可以通过另一个变量看到这些更改。

◆关系数据库表中的行不具有唯一标识。由于每一行都具有唯一的主键,因此任何两行都不会共用同一键值。

实际上,通常我们是将数据从数据库中提取出来放入另一层中,应用程序在该层对数据进行处理。这就是 LINQ to SQL 支持的模型。将数据作为行从数据库中提取出来时,你不期望表示相同数据的两行实际上对应于相同的行实例。如果您查询特定客户两次,您将获得两行数据。每一行包含相同的信息。

对于对象。你期望在你反复向 DataContext 索取相同的信息时,它实际上会为你提供同一对象实例。你将它们设计为层次结构或关系图。你希望像检索实物一样检索它们,而不希望仅仅因为你多次索要同一内容而收到大量的复制实例。

在 LINQ to SQL 中,DataContext 管理对象标识。只要你从数据库中检索新行,该行就会由其主键记录到标识表中,并且会创建一个新的对象。只要您检索该行,就会将原始对象实例传递回应用程序。通过这种方式,DataContext 将数据库看到的标识(即主键)的概念转换成相应语言看到的标识(即实例)的概念。应用程序只看到处于第一次检索时的状态的对象。新数据如果不同,则会被丢弃。

LINQ to SQL 使用此方法来管理本地对象的完整性,以支持开放式更新。由于在最初创建对象后唯一发生的更改是由应用程序做出的,因此应用程序的意向是很明确的。如果在中间阶段外部某一方做了更改,则在调用 SubmitChanges() 时会识别出这些更改。

以上来自MSDN,的确,看了有点“正规”,下面我用两个例子说明一下。

Linq对象引用

在第一个示例中,如果我们执行同一查询两次,则每次都会收到对内存中同一Linq对象引用。很明显,cust1和cust2是同一个Linq对象引用。

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

下面的示例中,如果您执行返回数据库中同一行的不同查询,则您每次都会收到对内存中同一Linq对象引用。cust1和cust2是同一个Linq对象引用,但是数据库查询了两次。

  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实现XML转换浅谈
  3. Linq to SQL强类型DataContext
  4. Linq SelectMany学习经验
  5. 使用LINQ进行数据转换剖析
责任编辑:佚名 来源: IT168
相关推荐

2009-09-09 14:20:49

LINQ To Luc

2009-09-11 09:41:19

LINQ to SQL

2009-09-08 10:50:20

2009-09-07 17:05:10

LINQ进行查询

2009-09-15 09:39:38

LINQ查询架构

2009-09-07 17:46:18

LINQ高级特性

2009-09-17 09:15:49

Linq表达式树

2009-08-03 17:51:43

C#引用类型

2009-09-18 09:25:06

LINQ Framew

2009-09-09 15:28:43

Linq to obj

2009-09-15 16:26:36

Linq orderb

2009-09-10 16:28:17

LINQ查询

2009-09-18 16:00:07

LINQ架构

2009-09-14 10:57:46

LINQ入门

2009-09-08 13:16:01

Linq to SQL

2009-09-10 17:30:15

LINQ Where子

2009-09-16 10:38:43

LINQ查询

2009-08-13 11:01:32

LINQPadLINQ工具

2009-09-08 13:07:15

介绍Linq to S

2009-09-15 15:09:50

Linq本质
点赞
收藏

51CTO技术栈公众号