LINQ是.NET3.0中引入的一块新内容,它是什么东西呢。
好像是因为现在系统中数据格式越来越多,针对每一种数据进行不同方式的操作很麻烦,终于让某些人看不惯了,我们要解决这个问题。当然仍然是老方法,用一层壳把下层的差异覆盖起来,然后在上面提供统一的处理方式。思路是很简单,但要真正实现,应该是非常复杂的,光应用来讲,为了顺利使用LINQ,我们借助了 隐式类型变量,匿名类型,扩展方法,对象初始化器,集合初始化器,以及LAMBDA表达式。最后的最后,终于得到了一个简洁实用的解决方案。下面看具体内容:
针对不同的数据源,LINQ的具体应用可以分为几种:
LINQ to object, LINQ to DataSets, LINQ to XML, LINQ to SQL,LINQ to Entities. 还有其它的很多种,也就是说LINQ只是一种标准,就好像ADO.NET编程需要不同的DB提供不同的Data Provider一样,要使用LINQ技术来操作不同的数据源,那么这种数据源也需要提供相应的LINQ Provider。
关于LINQ,在这边也有打了很多仗,我很喜欢看,尤其是老赵一出马,我就很高兴,因为老赵辩论讲得很精彩,很有料,下面先摘一句老赵的话来提纲挈领:
“LINQ的精化在于LINQ to Object以及LINQ模型,与L2S无关。LINQ里用的最多的也是LINQ to Object。”
并且在学习的过程中还发现了一个叫ORM的概念:Object-Relation Mapping,对象关系映射。主要用于实现业务逻辑和关系数据库中数据表的对应关系。让你摆脱访问数据库的细节。 由此看来,L2S也是ORM的一种啦。常见的ORM有:IBatisnet,WilsonORM什么的。。。对这个概念,我现在还是一点不懂呀。。。。。55555555
看这篇文章,我对ORM大致有了一点点了解,摘抄如下:(http://www.cnblogs.com/dlwang2002/archive/2007/01/06/613582.html 作者:随心所欲)
ORM的出现背景:
软件开发,我们已经知道了OO思想对于我们发开的意义(把现实的物体变成程序里面抽象的对象(类),让我们的开发可以变成一种对现实社会的模拟。通过这个模拟,代码不再无聊,对象让他变得优美起来。各类对象让我们的软件变得丰富多彩)。但是对数据库我们去无能为力,他只是一个二维网格,这就是他唯一的一个结构。怎么才能让这个没有情调的东西适应或者“伪”适应我们这个优美的OO呢?
于是乎,ORM出现了。他比较巧妙的解决了这个问题。他把Table应设成一个类,把一条数据应设成这个类的一个实例。反过来,把这些实例再度转换成数据行,操作到数据库。
数据库ß->ObjectSpace,NameSpace
数据表ß->Class
数据行ß->Instance (object)
数据列ß->属性
数据操作ß->类的方法
ORM的特点
看,通过这个映射之后,我们得到了一个什么样的结果。数据表成了一个个我们熟悉的对象,我们完全可以这样理解我们的模型。
ObjectSet users=Space.GetObjectSet<User>(“userId>100”);
(users[2] as User).Name=”xxx”;
users.Persit();
从这里看,我们不再关心什么数据行列了,只是对于对象的操作就可以。
ORM的优点
1:模型化数据表,使逻辑更清晰,容易理解。
这个优点就是刚开始提到的那一个,把二维的数据表映射成对象,这样的开发看起来要清晰一些,比起全都是行列来。
2:快速开发。
对于数据库常用的操作,无非就是CRUD。创建、修改、删除都可以使用ORM方便的来操作。对比这两段代码:
string sql=’update T1 set (xx=xxx,xxxx=xxxxx)’;
T1.Xx=XXX
T1.XXX=XXXX
T1.Persit()
如果字段表比较少,还看不出区别,如果字段有几十个,那么用字符串就显得很麻烦,并且还容易写错。而如果使用了ORM,至少类的属性可以地动提示了,出错的机会少,并且代码看起来漂亮多了,易读易维护。
对于取数据集操作,ORM就力不从心了。它可取出一个表的数据,但是在数据表连接,取得特定字段等方便就显得很弱。更不用说一些复杂sql的执行了。
3:其他辅助工具
ORM提供了很多其他操作函数,用以补救他的弱点。不同ORM提供的不一样。WilsonORM提供了这样一些函数:
ExecuteCommand();
ExecuteDelete
ExecuteScalar
ExecuteUpdate
GetDataSet //可以执行复杂的sql。
GetObjectCount
还有就是提供了不同数据库类型的Connector,还有数据库分页技术等(这个功能很有价值)。
ORM的不足
1:取数据的灵活性
比方说:多表连接。这一个在orm里面就无法实现(很难实现)。而这个有非常常用,特别是在作统计的时候。
比方说:取出的垃圾数据(只想取得某一列,但是orm是取出全部的)。
2:运行速度
由于orm要做很多操作,映射对象之类的,所以必然要消耗一些系统性能。这个也可以理解,快速开发,必然运行效率受损。
如何使用ORM
扬长避短。适度使用。
1:大量数据表的简单的操作全部使用ORM。一般的操作,特别是插入、修改、删除等操作,使用ORM,快速方便。
2:对于需要灵活操作的模块使用其他方法。比方说使用多表连接,或者其他复杂sql的逻辑等,就需要使用其他工具。
结:
合理使用ORM,就是“扬长避短”的一个过程。这是一个通用的对待工具的态度。只有这样理智的对待ORM,我们才能从中获益,让工具为我们服务,而不是我们为工具所累。
好啦,我还是回到具体的LINQ来。