Eric.rz.Liang
少壮不努力,长大会挨踢。从小不学好,天天修电脑。

 

【EAP.Data】主要任务在于解决数据库的访问,与数据验证。简便--没有复杂的影射配置;灵活--使用对象组织任意的SQL命令;安全--实现SQL命令编译时检测,提供安全的类型转换;高效率--轻量级操作以减少性能损耗。

 

 

首先来总结一下数据库访问类库的设计要考虑的因素和设计思路:

  1. 支持Oracle,MSSQL,MySQL等常用的数据库。通过各种数据库的Provider实现不同数据库的访问功能。暂时还没接触过Sqlite, PostgreSql, DB2,但可以保留扩展。
  2. 基本功能:增删改查,存储过程,自定SQL语句,子查询,分页查询,通用的函数等。
  3. 通过设计一组对象来表示数据库的结构。通过这组对象组装SQL命令,把SQL的关键字对应于相应的C#方法,取代直接拼写字符串。既要保证灵活性,又要避免字符串命令在编译时无法检测到的错误。
  4. 各种数据库的命名规则和数据类型不尽相同,要尊重各种数据库的规则,能把Oracle中字段ITEM_CATEGORY NUMBER(9)或者MSSQL中ItemCategory int Mapping到C#的属性int ItemCategory。
  5. 提供基本的数据验证方法,当验证失败后,使用异常中断方法的执行,并提供验证失败的信息。
  6. 通过特性(Attribute)把DTO的字段与表示数据库物件结构的对象建立相应关系,通过反射把数据装载到DTO中。

 

数据库访问的DataAccessor,DbProvider,QueryPortal

  创建一个DataAccessor的类,用于执行DBCommand。DataAccessor通过DbProvider去创建QueryPortal,QueryPortal是创建DbCommand的抽象类,同时还包括一些通用的数据库函数对应的C#方法。 

     DataAccessor中Fn属性是Function类型,包括调用数据库函数的方法,TraceSql属性设置为true时将会调用EAP.Logger.Log.Trace方法把执行的DBCommandText记录到日志中。CustomSql可以执行字符串的SQL语句,StrodProcedure用于执行存储过程。BeginTransaction将返回EAP.Data.DbTransaction,是对System.Data.Common.DbTransaction的封装。Select,Update,Delete,Insert是SQL关键字对应的方法,结合表示数据库结构的DbTable,DbColumn类使用。

 

 

  各种数据库的Provider继承抽象的DbProvider。

 

 

   通过实现QueryPortal中的方法,创建不同数据库的DbCommand。 

 

 

 

表示数据库结构的DbTable,DbColumn,DbStoredProcedure

  DbTable对应数据库表或者视图,主要包括表名和别名。DbColumn对应于数据库中的字段,继承自Expression类,可以进行各种操作符运算,包括DbType,ColumnName等属性。DbStroedProcedure包括Name属性,对应数据库的存储过程。

     Expression中Avg,Count,Max,Min,Sum,+,-,*,/,%等方法或者运算操作返回的仍然是Expression对象,Between,Fuzzy,In,NotIn,IsNull,IsNotNull,Like,!,==,!=,>,<,>=,<=等方法或者运算操作返回的WhereStatement对象。

 

 

用于验证的Validator

  Validator提供基本的数据验证方法,验证失败的信息将添加到ErrorInfoCollection中。ErrorInfo包括字段名,行号,ErrorTextCollection类型的Errors属性。ErrorText是用于本地化(Localization)的对象,包括表示资源键的ResKey,如果没有提供资源,将显示默认设定的Text。

 

 

 

实体的影射

  通过ColumnInfoAttribute特性,把实体的字段与表示数据库结构的DbColumn关联起来。ColumnMapping把反射的信息保存在静态字典中,避免重复地进行反射操作。

 

 

 

 【LeanEAP.NET】精益企业应用平台----系列目录

posted on 2012-05-30 23:54  Eric.rz.Liang  阅读(913)  评论(0编辑  收藏  举报