LINQ TO SQL学习笔记(4)_纵览
2009-04-15 16:53 宗哥 阅读(2492) 评论(7) 编辑 收藏 举报
1. LINQ和LINQ TO SQL
这是初学者经常模糊的一个概念。其实两这个是不同。先来看LINQ。
一下引自MSND:http://msdn.microsoft.com/zh-cn/library/bb397926.aspx
语言集成查询 (LINQ) 是 Visual Studio 2008 中的一组功能,可为 C# 和 Visual Basic 语言语法提供强大的查询功能。LINQ 引入了标准的、易于学习的查询和更新数据模式,可以对其技术进行扩展以支持几乎任何类型的数据存储。
通常我们应用程序要集成各种各样的数据,因此我们要面对各种各样的数据源,XML,数据库(SQL Server,Access),内存集合数据(像List,Dataset等),文本文件等,但是我们面对不同的数据源要掌握不同的数据操纵技术(Ado.Net操作关系数据库,XPath,XQuery操作XML,System.File操作文件),能不能以一种统一,标准的更面向对象的技术来操作这些不同的数据源?这就是LINQ初衷。LINQ体系如下:
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. 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 设计器) 参见: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 代码生成工具,一般我们用这个产生Code和map文件,然后把它加到项目当中,如下图:
看下这个代码产生文件,在类和属性(property)施加属性(attribute)不见了,通过单独一个文件northwind.map来描述映射。而其这个文件也支持智能感知。
注意:如果你的开发环境没有出现只能感知,是缺少Schema文件LinqToSqlMapping.xsd引起的,这是VS2008的一个Bug,请下载Visual studio 2008 SP1。
对于第三种方式,手工代码的方式,就很明白了,如果你是在不喜欢ORM设计器的臃肿,有不喜欢SQLMetal工具不可控性,手工代码不是为一种选择,不过你可以辅助CodeSmith和mygeneration等工具解决。注意手工书写的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>>
声明: 本文作者:宗哥,宗子城
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明。 ...