代码改变世界

LINQ TO SQL学习笔记(4)_纵览

2009-04-15 16:53  宗哥  阅读(2490)  评论(7编辑  收藏  举报

 

1.     LINQLINQ TO SQL

   这是初学者经常模糊的一个概念。其实两这个是不同。先来看LINQ

一下引自MSNDhttp://msdn.microsoft.com/zh-cn/library/bb397926.aspx

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

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

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

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

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

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语言新特征,你可以参看:

WebCastC# 3.0 锐利体验系列课程

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

 利用LINQ TO SQL开发,在建立对象模型有不同的选择

(1)        利用对象关系设计器(O/R 设计器) 见:http://msdn.microsoft.com/zh-cn/library/bb384428.aspx

(2) 利用SQLMetal 代码生成工具,参见:http://msdn.microsoft.com/zh-cn/library/bb386987.aspx

 (3) 自己手写代码

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

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

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

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

 

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

 

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

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

5.     LINQ To SQL 的其他资源

   对于技术,适合自己就好,LINQ不会消亡,也不要盲从LINQ TO SQL 将死,LINQ TO SQL VS 什么类文章,如果你喜欢LINQ TO SQL的,下面这些资源供你参考:

微软的LINQ 101 Sample:C:\Program Files\Microsoft Visual Studio 9.0\Samples\2052\CSharpSamples.zip这个绝对不能错过。

博客源:http://kb.cnblogs.com/zt/linq/list/42463/

CodeProject: http://www.codeproject.com/info/search.aspx?artkw=linq+to+sql

MSDNL:http://msdn.microsoft.com/zh-cn/library/bb386976.aspx

WEBCast: http://www.cnblogs.com/kennethbyron/articles/805469.html

另外奉献我收集到的电子书一本:<<Pro LINQ Object Relational Mapping with C# 2008>>

;