Linq学习笔记预览1
来源:广州中睿信息技术有限公司官网
发布时间:2012/10/21 23:25:16 编辑:itlead 阅读 1597
1.LINQ和LINQTOSQL这是初学者经常模糊的一个概念。其实两这个是不同。先来看LINQ。以下引自MSND:语言集成查询(LINQ)语言集成查询(LINQ)是VisualStudio2008中


  1.LINQ和LINQ TO SQL

  这是初学者经常模糊的一个概念。其实两这个是不同。先来看LINQ。以下引自MSND:语言集成查询 (LINQ)

  语言集成查询 (LINQ) 是 Visual Studio 2008 中的一组功能,可为 C# 和 Visual Basic 语言语法提供强大的查询功能。LINQ 引入了标准的、易于学习的查询和更新数据模式,可以对其技术进行扩展以支持几乎任何类型的数据存储。

      通常我们应用程序要集成各种各样的数据,因此我们要面对各种各样的数据源,XML,数据库(SQL Server,Access),内存集合数据(像List,Dataset等),文本文件等,但是我们面对不同的数据源要掌握不同的数据操纵技术(Ado.Net操作关系数据库,XPath,XQuery操作XML,System.File操作文件),能不能以一种统一,标准的更面向对象的技术来操作这些不同的数据源?这就是LINQ初衷。LINQ体系如下:

      1.jpg


  LINQ 构架在.Net Framework上,你可以使用任何你擅长的Net平台语言使用LINQ,另外LINQ的高度可扩展性,只要实现了 IEnumerable<T>,都可以应有LINQ技术。

  MSDN:LINQ to SQL 是 .NET Framework 3.5 版的一个组件,提供了用于将关系数据作为对象管理的运行时基础结构。

  可以这样理解,LINQ to SQL是LINQ体系的一部分,是个特定SQL Server数据库的轻量级的ORM方案,以一种更加统一简单的类SQL方式应用于对象模型和数据库之间通信。LINQ To SQL体系如下:

       2.jpg

  2.ORM   

  上面提到,LINQ TO SQL可以理解为一个轻量级的OR/M方案,那么什么是ORM?ORM解决什么问题?   

       ORM(通常也叫OR/M,O/RM, O/R Maping)是一种技术,解决软件开发中关系数据库和面对对象语言之间的阻抗失衡问题。

  3.C#3.0的几个新特征C#3.0有几个新特征

  a) 隐含类型局部变量
       b) 扩展方法
       c) 对象与集合初始化器
       d) 匿名类型
       e) Lambda表达式
       g) 表达式树,
       f) 查询表达式(LINQ)

  我总是觉得C#其他新特征是为LINQ准备的,至少在LINQ技术中,到处看到他们影子。这几个新特性必须掌握否则LINQ你只能学的一知办解。

      关于C#3.0语言新特征,你可以参看:WebCast:C# 3.0 锐利体验系列课程

  4.LINQ TO SQL开发中对象模型的选择

  利用LINQ TO SQL开发,在建立对象模型有不同的选择
     (1)利用对象关系设计器(O/R 设计器)
     (2)利用SQLMetal 代码生成工具
     (3)自己手写代码

  ORM不是空穴来风,通过他能能把对象持久化到数据库,能把关系数据填充到对象,我们要去看下对象模型。对于第一种方式,设计器只是我们的手段,我们要的只是那个生成的代码文(Northwind.desinger.cs)如下图:

      3.jpg

我们把这个文件内容拷贝到另外新加入类中来,软后删除这个Northwind.dbml,软件照常编译样运行。仔细观产这个Northwind.desinger.cs文件,注意表红的部分,如下所示:

      4.jpg 

  通过给类和公共属性(property)施加属性(attribute)来描述映射,实对象和关系数据库之间建立关系。这种Maping方式也称作侵入式,系统不是很灵活,对于Mapping的任何变动,系统需要重新编译。

  在看利用SQLMetal 代码生成工具,一般我们用这个产生Code和map文件,然后把它加到项目当中,如下图:

       5.jpg

  看下这个代码产生文件,在类和属性(property)施加属性(attribute)不见了,通过单独一个文件northwind.map来描述映射。而其这个文件也支持智能感知。

      6.jpg


  注意:如果你的开发环境没有出现只能感知,是缺少Schema文件LinqToSqlMapping.xsd引起的,这是VS2008的一个Bug,请下载Visual studio 2008 SP1。

  对于第三种方式,手工代码的方式,就很明白了,如果你是在不喜欢ORM设计器的臃肿,有不喜欢SQLMetal工具不可控性,手工代码不是为一种选择,不过你可以辅助CodeSmith和mygeneration等工具解决。注意手工书写的Mapping文件一定要通过Schema文件LinqToSqlMapping.xsd的验证。

 

本站技术原创栏目文章均为中睿原创或编译,转载请注明:文章来自中睿,本站保留追究责任的权利。

 

联系我们CONTACT 扫一扫
愿景:成为最专业的软件研发服务领航者
中睿信息技术有限公司 广州•深圳 Tel:020-38931912 务实 Pragmatic
广州:广州市天河区翰景路1号金星大厦18层中睿信息 Fax:020-38931912 专业 Professional
深圳:深圳市福田区车公庙有色金属大厦509~510 Tel:0755-25855012 诚信 Integrity
所有权声明:PMI, PMP, Project Management Professional, PMI-ACP, PMI-PBA和PMBOK是项目管理协会(Project Management Institute, Inc.)的注册标志。
版权所有:广州中睿信息技术有限公司 粤ICP备13082838号-2