LINQ to SQL全面概述

开发 后端
这里介绍LINQ to SQL,LINQ to SQL 目前只支持SQL Server(SQL Server Compact版本正在开发中),有迹象表明,也可能会支持DB2,Informix IDS,Oracle官方说法是他们在关注Linq的进展,VistaDB, MySQL。

在向大家详细介绍LINQ to SQL之前,首先让大家了解下LINQ to SQL不能算纯粹意义上的ORM,因为它支持的数据库种类和类型还不够多,然后全面介绍LINQ to SQL。

LINQ to SQL 目前只支持SQL Server(SQL Server Compact版本正在开发中),有迹象表明,也可能会支持DB2,Informix IDS,Oracle官方说法是他们在关注Linq的进展,VistaDB, MySQL。。。但可以预见的是Linq如果要在2007年底RTM,那么要支持其它数据库的时间上,并不多,甚至我在Weblog上看到说,对SQL Server Compact的支持都不包含在LINQ v1版本计划中。不过,MS,IBM,Oracle他们如果真决心做,那么时间不是问题上面的结论如果成立,那么我的***观点是,LINQ to SQL不能算纯粹意义上的ORM,因为它支持的数据库种类和类型还不够多

从技术的先进性和难度来看,Java Persistence API和Linq是解决不同层面问题的两种技术,并且从开发人员的角度来看,Java Persistence API没有Touch到Linq关注的层面,上面我说了,从编程语言的角度来看,LINQ是来自***层编译器和开发语言的支持,Java Persistence没这么底层;另外对于Java Persistence API,Adopt已有的ORM技术比如Hibernate, TopLink, JDO方面,Java Persistence API更像已有Java ORM的集大成者新建的一个API,而LINQ to SQL,LINQ to DataSet,LINQ to XML,LINQ to Entities,LINQ to Object,LINQ to Flickr, LINQ to NHibernate, LINQ to LDAP 已经都是板上定钉的事情,所以从设计上来看,LINQ更大气和宏观,因为一旦从编译器和开发语言的层面的支持,那么其融合渗透和应用的程度就相当高的,我认为其"亲和力"相当强悍

ADO.NET Entity Framework(ADO EF)更多的是一个实体或概念设计的服务框架,是现实的实体和实体间的关系映射到将对象层,CLR 类和它们之间的关系上,甚至ADO.NET Team也避免让ADO EF概念上变成一个类似ORM的设计工具,ADO EF强调的三层{概念层/实体层(Conceptual layer), 元数据层(Source schema)和影射层(Mapping layer)}的灵活、独立和松散耦合,从而使得你可以将一个概念层/实体层通过定义多个影射层从而映射到多个不同的数据库上,而这一点LINQ to SQL做不到,首先LINQ to SQL不支持实体的多重继承(支持有限的继承),甚至有评论说LINQ to SQL RTM之前都不会获得many-many relationships的支持,LINQ to SQL更多的是使用dbml属性非常紧耦合地绑定到一张表的某些特定的数据库字段上。也就是说LINQ to SQL没有这么多层,另外它强调的是编程语言对数据查询和分析的结构化支持(从编程语言的层面)

理论上ADO EF是一个浩大大工程的框架,从而能够更好的支持流行的Domain Model Driven的开发,这要求它要有三层的设计工具展现你的设计,突现和定位你的实体关系,要求工具能够根据实体层产生数据库的脚本或是反向工程,同时需要有精度极高同时有非常Smart的代码生成工具和界面,同时,而目前Orcas Beta1单薄的的EDM Wizard根本不足以完成这些要求,更早先发布的Entity Data Model Designer Prototype已经成为丰碑快不可超越,看看这里有比较漂亮的一个设计器的录像--很酷

“Entity Framework the March CTP and Beta 1 are almost identical. There's some last bit of features that we're busily working on now that will appear in Beta 2 and the Orcas Release”这意味着Orcas Beta1和March CTP中 ADO EF变化并不大(ccBoy建议:在Orcas Beta1你可以精力重点放在 LINQ to SQL上),甚至有人认为Orcas's Entity Framework 进度的重大的标志在于Orcas能够提供出优良的EDM Designer,满足我们上面说的工程需求,所以Orcas Beta2将是ADO EF的一个重大里程碑,所以结论是,ADO EF和 LINQ to SQL侧重点上看两者的关注点非常不同,相比来说ADO EF开发或性能上会奔重些,但是ADO EF倾向Domain Model Driven和支持更多的流行的数据库或数据源,但ADO EF绝对不是一个简单的ORM Tools,理解成实体框架和对象服务层技术会更宏观,这里面LINQ成为ADO EF中很小的一个低层支撑技术,我刚刚说了LINQ的亲和力

从技术开发的角度来看,如果你的实体/业务模型(或者称为问题域)和已有的数据模型不匹配的时候,你需要考虑ADO EF,反正如果你的实体/业务模型(或者称为问题域)和已有的数据模型匹配,那么LINQ to SQL 会是不错的选择至于LINQ to Entities和LINQ to SQL,上文已经说的比较清楚(思归翻译的版本),我总结一下,相同点是,LINQ to Entities是LINQ to SQL的一个超集或加强版(Superset),你看到两者的Feature对比上,LINQ to Entities更重,它运行或说让你在一个概念数据模型上(Conceptual data model),你对对象的查询是发生在这一层

那么不同的地方在于,你使用LINQ to SQL的时候,你的映射,产生的CLR/.NET类是和你的数据/数据库模型紧耦合或绑定的,如果你改变对象模型,那么你要直接修改这些类,同样如果数据模型改变,你要使用重新生成对象代码,而ADO EF在数据/数据库模型上建立一个概念层/实体层,这使得你要先定义概念层/实体层,接着建立数据/数据库的脚本(描述),然后在一个影射层建立你的实体和数据之间的逻辑映射,这使得业务和数据源之间有了很好的藕合度和隔离。而LINQ to SQL无法达到这样的效果,另外LINQ to Entities也直接带有了ADO EF提供的另外一些强项,比如实体的继承(Entity Inheritance ),实体的组合(Entity Composition)

Entity SQL (eSQL)更多的时候,它是SQL语句的变体是完全面向查询语言的(Query Language),但是是对应的是对实体数据模型的查询,是对实体,实体中的属性进行查询,更多的时候Entity SQL 是面对ADO EF的Object Services,对象服务是ADO EF中能够将实体像对象一样工作和操作的服务,事实上Object Services往往是事实上的内存对象数据库,当然在这里你只能查询对象或实体并获得它们,你不能是使用SQL DML语句一样,Update或Deleted对象或实体(当然未来可以,现在v1版本是做好查询),当我们要和上面说的概念层/实体层交互的时候,***你可以使用Entity SQL (eSQL),第二你要使用LINQ to Entities,Entity SQL (eSQL)是文本和字符的,所以它支持组合(composable),比如子查询,而后你明白所有的LINQ to XXXX,其实就是说你如何让你在编程语言这个层面,很快地享受到LINQ针对XXXX(数据源或对象源)的数据集成和查询的能力以及便利(内置的表达式,操作语句,代码生产效率,性能等等)

***是Entity Client,这个一个新型的API,也就是专门用来访问实体源或实体数据模型,Entity Client使用自己的语言-Entity SQL (eSQL),它也是ADO.NET提供的另外一个数据源提供驱动,你可以用理解SqlClient一样来理解Entity Client,它是另外一条访问实体数据模型的途径,它存在的意义有两个,***它的访问性能会高,第二,EntityClient返回的结果是 dbDataReader,这意味着你可以使用统一或者你非常熟悉的代码经验比如你使用ADO.NET操作 SQL Server, Oracle,MySQL的技能对查询回来的数据进行娴熟地处理,抑或是如拌凉菜般地翻腾这些数据。

作为一个顾问和实践者,我们首先要去做,然后要面临给予自己和其他的人一些建议,在未来的6个月到一年:
1. LINQ的出现展示了一种***层的新型张力,任何现代编程语言最重要的能量和动力在这个语言的编译器,LINQ的出现让所有有关语言先进性争论的时代划句号,作为技术人员你需要察觉到这种变化和带来的影响
2. 从目前的Orcas Beta1版本来看,建议你在未来的6-12月优先学习C# 3.0和LINQ,掌握新型的表达式、语法和语句,这是未来编程语言中和For,IF语句一样的基本功,而每个开发人员需要熟练的使用这些语句,当然能够研究和搞明白这些新语句的背后的实现和原理,那是***的
3.对于那些已经掌握C#3.0和LINQ的中级的开发人员来说,在LINQ to SQL(LINQ2SQL)和ADO.NET Entity Framework来说,可以优先考虑学习和研究LINQ to SQL,并将其这种技术在项目或应用中做以实践
4.ADO.NET Entity Frameworkd的 Entity Desiger出来之前,保持对它的关注,而不用花太多的时间,另外从一个开发人员的角度来看,ADO EF不是必须的,甚至在设计人员特别是Domain Model Drivening的人员要关注和准备的,当然这些在6个月之后考虑和研究都不晚
5.Visual Studio Orcas的发布日期依然是一个很关键的因素,可以预见的是C# 3.0和LINQ将会在人们期望和愿望实现的时间点发布,但涉及到ADO.NET Entity Framework的部分有多少,这个要观察和注意,但反过来说,有了LINQ和LINQ to SQL已经让我们感到物有所值了
6.在你的项目中考虑新的功能特性对应用架构的影响,同时也尽可能多练习在ASP.NET这种传统的开发技术下LINQ和C# 的应用
7.继续保持对Visual Studio Orcas的关注,因为.NET 3.5或.NET 4.0已经开始走向更成熟,先进和自信的一面

【编辑推荐】

  1. LINQ匿名类型分析
  2. LINQ Where子句介绍
  3. LINQ使用Where扩展方法
  4. 介绍LINQ一些强大功能
  5. Linq使用Select浅谈
责任编辑:佚名 来源: IT168
相关推荐

2009-09-18 16:20:36

LINQ基础

2009-09-16 17:21:53

LINQ遍历

2009-09-09 14:40:43

Linq to sql

2009-09-15 13:53:53

Linq To Sql

2009-09-17 16:46:34

Linq to sql

2009-09-15 11:29:04

LINQ to SQL

2009-09-15 13:37:24

Linq To Sql

2009-09-18 16:12:22

LINQ TO SQL

2009-09-10 13:42:47

Linq UserIn

2009-09-10 11:10:21

Linq Librar

2009-09-08 11:25:42

Linq foreac

2009-09-18 16:07:10

Linq Where操

2009-09-08 16:08:44

Linq使用order

2009-09-14 09:55:55

Linq基本语法

2009-09-18 13:44:38

LINQ设计模式

2009-09-10 16:28:17

LINQ查询

2009-09-14 15:15:45

LINQ技术

2009-09-17 13:15:20

LINQ查询

2009-09-16 10:38:43

LINQ查询

2009-09-09 16:07:16

Linq实体关系
点赞
收藏

51CTO技术栈公众号