技术开发 频道

用LINQ to SQL进行数据层访问


 【IT168 技术分析】Orcas的SQL LINQ和它的Object/Relational Designer让ADO.NET开发人员可以结合O/R图,对象保持,和LINQ在SQL服务器自动生成的数据接入层的查询请求。
    技术工具箱:VB.NET, C#,SQL Server 2005 SP2,其它:Visual Studio"Orcas" Beta 1或更新版本 。
   
    面向对象的概念稳固建立,是现今的软件抽象模型,但是如果打赌目前有90%或更多的.NET发展项目都连接到关系数据库,多半不会输。 

    把.NET的“简单老式的CLR对象”链接到关系表的行会产生编程中断,这经常会引起阻抗不匹配。差不多有50个专用和开源的插件,库,工具可供.NET开发人员用来桥接对象—关系。但是在Orcas之前,微软不会提供对象/关系图(O/RM)的工具。Redmond第一次尝试提供一个O/RM平台的努力主要以ObjectSpaces的形式在Whidbey(对 2005 Beta 1)中出现。但随后就随着WinFS的退位而销声匿迹了。根据Whidbey的参与者引起的骚动来看,当ObjectSpaces消失之后,面向数据的.NET开发人员显然会是O/RM的狂热分子。

    LINQ to SQL(以前叫DLing)是微软用O/RM数据接入层(DAL)来填充ObjectSpaces的第一个努力。DAL综合了对象持续管理和独立语言查询(LINQ)技术.设立DAL的目的是把数据存储和其它的应用层分开。DAL处理创建,找回,更新,和删除(CRUD)操作。仅仅几行代码就能为你的表示层和内存中的对象或,必要时,下层数据存储的LINQ加强查询提供事务对象。LINQ也掌控数据标志,以避免内存中对象实例和数据跟踪的重复,这样就可以持续保证数据存储表中实例的改变。

    传统的ADO.NET SqlCommand和OleDbCommand对象依赖于查询字符串在数据库上执行CRUD操作。查询字符串有两个致命弱点:第一,要求开发者学习另一门编程语言(SQL),这门语言有很多独特的地方。第二,SQL命令是后期绑定的,所以无法被编译器的语法检测检查出来,也不能获得智能感应的支持。LINQ通过向C# 3.0和VB 9.0添加一种强类型的,类似于SQL的查询语法来克服这些问题。LINQ为查询内存中的对象(LINQ to 对象),XML文档(LINQ to文档),SQL数据库(LINQ to SQL),以及Orcas的实体框架和实体数据模型定义的数据对象(LINQ to 实体)提供完全的智能感应,类型安全,和静态类型检查。LINQ将在下一个版本的C#,VB中综合关键字,从而为查询提供最好的结果。

    Orcas Beta 1包括一个较早,但是可以操作的LINQ to SQL的应用,以及一个更新过的图形O/R Designer,本文将深入讨论这个。在把LINQ to SQL作为一个O/RM工具进行全面的评价之前,你得知道LINQ to SQL只能连接到SQL Server 200x,MSDE 2000,或SQL Server Express。不支持SQL Server CE或任何其它的后端数据库。LINQ to SQL直接由数据库的元数据产生类,所以映射仅限于每个类模型的表。继承的模型也受到了严格限制;单一表的映射需要继承结构被存在一张表上,这张表得指派一列来存储用来区别子类的鉴别值。

    写代码或设立XML文件来定义O/RM是令人畏惧的过程,但是LINQ to SQL会替你完成其中的大部分工作。你可以用命令行工具SQLMetal.exe或图形化O/R Designer,从已有的SQL服务器数据库创建一系列类。开始一个新的Windows表格或Web站点项目并增加Ling[sic]到SQL文件对象,这些动作会增加一个默认的,带有指向DataClasses.dbml.diagram XML文件和DataClasses.designer.vb 或cs 文件的条目的DataClasses.dbml节点。后面的文件包含一个框架DataClassesDataContext局部类,这个类带有两个默认的构造器。默认情况下,所有的WinForm工程都有一个System.Xml.Linq的LINQ to XML引用;添加Linq to SQL文件项将把System.Data.Linq引用增加到WinForm和Web站点工程中。基础LINQ查询的System.Linq名称空间是System.Core.dll组件的一部分,因此,你不必添加一个指向它的引用。
0
相关文章