PrideORM框架设计---数据访问层的设计
在介绍ORM框架之前,先介绍一下数据访问层的设计。数据访问层是ORM框架的基础,ORM只是封装了数据的访问操作而已。我是根据.net提供的数据库访问对象把数据库划分为三类的:
/// <summary>
/// 数据库类型
/// </summary>
public enum DataBaseType
{
SqlServer,
Oracle,
OleDb
}
除去SqlServer和Oracle,其它的数据库都归为OleDb。数据访问层采用了工厂模式,根据参数创建对应的数据访问类,工厂代码如下:
DBHelperFactory
public class DBHelperFactory
{
public static string ConnectionString { get; set; }
public static DataBaseType dbType { get; set; }
static DBHelperFactory()
{
dbType = DataBaseType.SqlServer;
}
/// <summary>
/// 根据数据库连接字符串名生成数据库访问类
/// </summary>
/// <param name="connectionName"></param>
/// <returns></returns>
public static IDBHelper CreateDBHelper(string connectionName)
{
///从配置文件中获取数据库连接字符串
ConnectionString = ConfigurationManager.ConnectionStrings[connectionName].ConnectionString;
switch (dbType)
{
case DataBaseType.SqlServer:
return new SqlDBHelper(ConnectionString);
case DataBaseType.Oracle:
return new OracleDBHelper(ConnectionString);
case DataBaseType.OleDb:
return new OleDbHelper(ConnectionString);
default:
return null;
}
}
}
数据访问对象是根据设置的数据库类型和传入的数据库连接字符串名创建的,也就是说,在一个项目中,可以使用多个不同类型的数据库,默认使用的是SqlServer数据库。各数据访问类继承统一的接口:
public interface IDBHelper
{
/// <summary>
/// SQL语句
/// </summary>
string CommandText { get; set; }
/// <summary>
/// 返回多条数据记录
/// </summary>
/// <returns></returns>
DataTable ExecuteDataTable();
/// <summary>
/// 返回单条数据记录
/// </summary>
/// <returns></returns>
DataRow ExecuteDataRow();
int ExecuteNonQuery();
object ExecuteScalar();
/// <summary>
/// 添加参数
/// </summary>
/// <param name="key">键</param>
/// <param name="value">值</param>
void AddParameter(string key, object value);
}
代码很简单,就不多作解释了,大家可以看源码,基本都有注释的。现在看一下数据访问层的使用:
public DataTable GetDataTable(string name)
{
///设置数据库的类型
DBHelperFactory.dbType = DataBaseType.SqlServer;
///创建数据访问类
IDBHelper dbHelper = DBHelperFactory.CreateDBHelper("ConnectionString");
string sql = "select * from Products where name=@name";
dbHelper.CommandText = sql;
///添加参数
dbHelper.AddParameter("@name", name);
return dbHelper.ExecuteDataTable();
}
使起来用就是这么的简单,很直观。
ORM框架的内容比较多,要断网了,真不方便啊,用的是隔壁的交换机,别人要睡觉了。最近在做一个项目,比较忙,明天晚上又要加班了。现在把数据访问层的源码附上,下次再介绍ORM框架的设计。本人喜欢原创,虽然没有别人的框架那么好,那么灵活,功能那么强大,但我用着开心。