

1 DataProvider综述
1.1 背景
1.1.1 头痛的事情
从无到有的建立数据访问层
没有剥离业务的数据访问层,开发很容易,维护极困难
传统的ADO.NET虽然强大,但是在开发效率和开发难度上并不尽如人意
数据库表数量多,关系复杂,数据访问层工作量非常大
SQL代码往往在运行时才发现错误,而非期待的编译阶段,影响项目质量
Debug时一直要追踪到数据层的SQL语句或存储过程
SQL虽然强大,但是从面向对象的角度来看,并不是一种高效和易于开发的手段。对新人来说,难以上手,线上问题的即时解决更是困难。
1.1.2 期望的情形
以面对对象的方式,剥离出统一的数据访问接口,把层次间的耦合度降到最低。
所有笨代码再也不用自己一行行Key出来
多种数据库的支持
1.1.3 呼之欲出
经历一系列“苦其心智,劳其筋骨”的过程,DataProvider(以下简称DP)与PPCoder结伴而来。
1.2 DP是什么
.Net环境下,数据访问层的解决方案,包含一个数据访问组件DataProvider.Dll和一个代码自动化工具PPCoder。应用于采用多层架构开发的软件系统。
1.3 DP的特点
数据访问层不用写一行代码,只需要设计数据库
数据库至少有一种约束:标识、主键、唯一
数据表之间可以配置主外键关系,从而实现关联查询模式
支持Sql Server和MS Access数据库
使用存储过程与Sql Server 交互,存储过程由PPCoder生成
两种数据库可以无缝切换,在保证结构一致的前提下,只要重新生成一下实体类即可
数据操作方法调用简单
支持针对数据访问类的事务
支持直接下sql语句
强大的数据查询功能
缓存数据
多种查询限定符:范围、返回数量、Distinct、关联查询、不等于
返回当前页:返回指定页的数据
多类型返回:DataSet、Reader和DataBox
1.4 DP的好处
把系统开发简化成数据库设计和业务功能的开发,节省人力
降低系统耦合度,将数据访问与业务分离,提高项目可维护性
数据库结构频繁改动时,项目不再受数据访问层的拖累
支持多种数据库,提高系统扩展性
2 使用说明
详见 产品手册和 DataProvider类库说明
3 Q&A
3.1 功能面
有点晕,PPCoder和DataProvider是什么关系?
DataProvider是个处理数据访问的中间件
PPCoder是个配合它的辅助工具,帮助自动生成具有特定结构的实体类(或存储过程)
DataProvider支持哪些数据库吗?
目前支持Sql Server和MS Access两种。后续会考虑支持Oracle数据库。
DP一个突出的特点就是结构相同的数据库可以无缝切换。如果目前出于成本和规模的影响使用MS Access作为数据库,那么将来想转化成Sql Server会非常容易。只需要使用PPCoder重新生成一下实体便可,原有代码无须任何改动。
3.2 应用面
使用DP对数据库设计有什么特别需求吗?
DP要求每张Table中至少有主键、标识或唯一键中的一个,以便唯一定位到一条数据。另外要特别注意的是生成实体的时候,每一个约束组合都会对应一个构造函数,所以不可以组合出来相同参数格式的约束组合。例如下面的设计是不合法的:定义RowID为主键,又定义一个ProductID为唯一键
因为我要操作的数据很大,所以总是报“数据库超时”错误,有办法处理吗?
超时是因为默认的SqlCommand的CommandTimeOut为30,而语句执行过程所需要的时间大于此时间,解决此问题的办法就是在Configration中初始CommandTimeOut为大一些的数字,如果不想设置超时时间,可以将此值设置为0
我的数据表关系比较复杂,我如何获取串表?
DP有三种办法可以串出符合相应条件的关系。每种方法应用于不同的情况
如果只是两张表之间的串联关系,可以使用QueryJoin获取相应的数据,应用此方法需要在生成实体类前在数据库建立两张表的关联关系。
另外一种自己直接向数据库中下Sql,然后通过ExecuteSql中的方法来检索数据。
还有一方法就是在数据库中拉出View,然后用PPCoder生成针对此View的实体,DP会把View当作一个普通的表来看待,针对View DP只提供查询功能,查询方法与普通表一样。
3.3 产品面
DP是石头里蹦出来的吗?
否,DP是余波的作品,请多指教。
更多信息见 http://blog.ppcode.com/article.asp?id=538
DP不要钱吧?
完全免费
联系方式MSN:ppcode@gmail.com
QQ:942365
DP有没有考虑过开源
DP已经开源,源码见下部链接
3.4 技术面
DP有什么技术特点
DP应用了.Net反射技术来对实体进行操作。
自定义Attribute来记录栏位信息。
PPCoder的生成应用了.Net框架中的CodeDOM
Sql Server中使用存储过程交互,很大程度上提高了性能
具体技术细节见类库说明
开源下载:
应用在.net2.0环境:
DataProvider_Net2.0
DataProvider_Net2.0_Source
coder2.0_net2.0_Source
应用在.net1.x环境:
DataProvider_Net1.x
DataProvider_Net1.x_Source
Coder2.0_Net1.x_Source