DLinq概述[1]

 目前很多开发者都在通过这样或那样的方式来处理存储在关系数据库中的数据。但是现代的编程语言和数据库在信息的表示和处理上有着天壤之别。这种不一致表现在很多方面。最显而易见的是,使用编程语言提供的API来访问数据库信息都需要提供一个文本字符串。其实这些查询是程序逻辑的一部分,但是它们于编程语言来说却是不透明的。因此也就无法获取到语言的编译支持以及设计时的一些特征,如IntelliSenseTM

        然而,它们的不一致还远不只表现在这些方面。编程语言和数据库对中立的数据模型的表示形式不一样。现代编程语言采用了对象。关系数据库则是采用行。在运行的时候对象实例是唯一的。数据库表格中的行则是通过主键来进行唯一地标识。对象之间通过引用来进行关联。数据库表格中的行则需要设置一个外键来松散地关联到其他表格的行。对象是独一无二的,对象的生命周期取决于对象的引用状态。数据库中的行是表格的基本组成元素,它们一旦从表格中移除就会立即消失。

        勿庸置疑,任何一个想要对编程语言和数据库实现无缝集成的应用程序都是难于创建和维护的。理所当然,我们可以简化这种平衡,放弃其中的一种技术即可。但是关系数据库已经为数据的存储和查询处理提供了很多关键的基础技术,现代的编程语言也是敏捷开发和强效计算所必不可少的。

       到目前为止,开发者们都试图在他们的应用程序中找出一种折中而有效的解决方案来解决这个问题。目前最好的解决方案就是,在应用程序领域模型和关系数据库模型之间建立一个数据库抽象层,通过数据格式和表现形式的转换来实现两者之间的数据传输。但是这些解决方案都是以牺牲关系数据库的最重要的特征(强大的数据查询能力)为代价的,因为它们不让应用程序开发者直接去访问真实的数据源。LINQ 项目中的一个组件DLinq为管理关系数据提供了基础的运行时支持,且不会牺牲数据库强大的查询能力。在运行的时候,DLinq把语言集成的查询翻译成SQL语句让数据库去执行,然后将从数据库中获取到的数据转化为应用程序指定类型的对象。应用程序可以在前台自由地处理这些对象,DLinq在后台自动地记录这些变化。

       DLinq的一个设计目标就是最大程度地兼容现有应用。DLinq只不过是ADO.NET家族中其中的一个组件,ADO.NET和DLinq使用同样的数据库连接和事务处理方式,所以完全可以以渐增的方式把现有的ADO.NET解决方案迁移到DLinq上。

       DLinq应用是很容易构建的。像定义普通的对象一样定义关系数据对象。所不同的是,这些关系数据对象需要附加特性来标识对象和行的映射关系。您甚至可以不用去手动编写这些代码。我们提供了这样的工具用于自动地转换关系数据库到对象的类型定义。

       DLinq提供的设计工具和运行时基础架构能够很好地减轻数据库程序开发者的工作量。以下章节阐述了DLinq是怎样来执行普通的数据库操作的。我们假设读者已经熟悉语言集成查询以及标准的查询操作符。

         DLinq是编程语言中立的。提供了集成查询支持的任何编程语言都可以使用DLinq来访问关系数据库。尽管如此,本文的所有例子都是用C#写的,Visual Basic编译器也支持LINQ

posted @ 2007-10-14 17:40  RicoRui  阅读(442)  评论(0编辑  收藏  举报