引言 Seaking.PL(以下简称PL)是我刚刚完成的一个轻量级数据持久层,在众多的数据持久层产品中,PL或许显得有些稚嫩,甚至有点难登大雅之堂,但是我相信,至于对于一部分应用,PL可能会是一个简易而实用的选择。 以下是PL的简介及使用说明,希望大家多多指点并提出建议,与大家共享一个迅速成长并不断完善的PL,也是我写此文的目的所在。一、概述PL除具有一般数据持久层的共性外,还具有以下特点:1. 无须配置文件及其他设置,最简单化的应用。2. 自动生成实体类。利用随同PL一起发布的代码模板可以自动生成实体类。3. 多数据源支持。目前可支持SqlServer、OleDb、Odbc、Oracle数据源。4. 支持空值(与DBNull.Value对应)处理。5. 支持事务处理。6. 同时支持面向对象的实体类及ADO.NET数据集的操作。7. 完全参数化的SQL生成。8. 相对强大的数据查询功能。 PL需待完善的功能:关系映射。
二、组成1. 主要对象从客户程序的角度看,PL主要由DataProvider(数据提供者)、Session(会话)、Query(查询)三个对象组成。DataProvider是PL的基础,同时也是Session和Query的工厂。Session是客户程序与数据源的一次会话,会话过程中可以对多个实体(Entity)或数据集进行查询、添加、修改、删除等操作,会话过程对事务提供了完善的支持。Query是一个查询对象,不具备Session的操作功能,但数据查询功能比Session更加强大,包括对View(视图)的查询及对Join(关联)、Condition(条件)、Order(排序)、Alias(别名)等的支持。2. 其他对象其他对象包括Entity(实体)、Property(属性)、Condition(条件)和ConditionColection(条件集合)、Log(日志)等,并使用了微软的DAAB数据访问组件3.0。Entity与数据表(DataTable)相对应,是最常用的对象,其本身并不是PL的一部分,但必须继承PL.IEntity接口。Entity可以利用随同PL一起发布的代码模板自动生成。Property与数据列(DataColumn)相对应,用来定义Entity的属性,同数据表应该具有主键字段一样,每个Entity应该有一个主键属性,用来对Entity进行唯一标识。PL共提供了24个Property类,分别与DbType枚举的24个成员相对应。Condition和ConditionColection为数据查询提供了条件的定义,由Session和Query共用。Log为PL提供了日志功能,主要用来记录PL使用过程中出现的异常信息或警告信息。三、使用1. 引用在项目中添加对PL的引用。2. 生成实体类根据PL提供的代码模板自动生成与数据表相对应的实体类。实体类示例代码如下:
考虑到一个程序中可能会访问不同的数据源或多个数据库,DataProvider提供的是非静态成员,需对DataProvider进行实例化后使用。同时强烈建议将DataProvider实例化为整个程序都可以访问的静态成员,这样使整个程序中只实例化一个DataProvider对象即可(当然如果需要访问多数据源/库,就需要对应的实例化多个DataProvider)。4. 使用A. SessionSession是所有实体或数据集的操作类,是PL中最主要的对象。Session不能用new进行实例化,而必须由DataProvider生成。
说明:代码中的10为Employee的主键属性的值,object类型,以下代码中可能会多次出现这种格式,将不再说明。b. 实体的更新
实体的更新和增加还可以统一写成:
当数据量较大或每个实体的属性较多时,一次性获取所有实体的集合或许不是最好的选择,主键属性值集合为客户程序采用“大颗粒”模式提供了必要的支持。g. 实体存在性检测
虽然事务只能存在于一次会话中,但不难看出,客户程序可以非常方便的实现多个会话(可能会访问不同的数据源/库)的事务处理。B. Query将在近期的续篇中对PL中的另一个主要对象Query及辅助对象Condition、ConditionColection的使用进行说明。
结束1. 建议征集由于本人对数据持久层缺乏深入的理解,PL可能存在许多不合理或待完善之处,真诚希望大家能够多多指点,提出建议,让PL不断成长和完善。2. 关于软件发布由于PL刚刚完成,可能尚有许多不完善之处,也不可避免的可能存在一些Bug,所以未敢贸然将PL发布出来。我会在听取大家的建议并将PL基本完善后,近期在我的Blog上提供PL的下载并陆续发布PL的文档及Demo,敬请感兴趣的朋友留意。3. 关于开源如果大家对PL感兴趣并有意为PL的成长和完善提供指导和帮助,我会考虑在适当的时候逐步对PL开源。4. 致谢非常感谢大家阅读此文及对PL的关注,同时希望通过大家的指点及帮助,将一个更加完善的PL与大家共享。2006.7.7 补充:Seaking.PL--Query对象简介已经发布。