}
}
}
在具体的配置文件里面,我们就可以根据需要配置好相关的数据库了。
根据Enterprise Library的配置,我们只要制定了,那么就会获取sqlServer的节点,而代码通过解析ComponentDbType配置项,就可以构造对应的数据库访问对象了。两者合一就可以正确获取到处理对象,并成功处理数据库的访问。
2、支持分拆不同数据库的设置
上面介绍的方式,一次性只能访问一个数据库,因此默认在代码构造数据库访问对象的时候,是通过下面的代码进行的。
Database db = DatabaseFactory.CreateDatabase();
这样每次只会获取defaultDatabase设置的数据库进行构造,如果我们在一个系统里面,同时支持多个数据库的访问,那么我们应该如何处理呢。
在框架的基类AbstractBaseDAL里面,我们对构造数据库的代码进行了封装。
///
/// 根据配置数据库配置名称生成Database对象
///
///
protectedvirtual Database CreateDatabase()
{
Database db = null;
if (string.IsNullOrEmpty(dbConfigName))
{
db = DatabaseFactory.CreateDatabase();
}
else
{
db = DatabaseFactory.CreateDatabase(dbConfigName);
}
return db;
}
而每个DAL层都会继承自AbstractBaseDAL,这样也就可以通过在DAL层指定dbConfigName进行使用不同的数据库的了。
但是这样问题出现了,假如我们有5个不同类型(SqlServer、Oracle、Mysql、Access、Sqlite)的数据库的DAL层,那么每个DAL层的实现类都要写一些代码,这样挺不方便,那么是否可以把它抽象到BLL层,这样只写一次配置就可以了,这个思路很好,我们具体来看看如何实现。
1)在IBaseDAL层定义接口
///
/// 数据访问层的接口
///
publicinterface IBaseDAL where T : BaseEntity
{
///
/// 设置数据库配置项名称
///
///
数据库配置项名称
void SetDbConfigName(string dbConfigName);
.............
}
2、在AbstractBaseDAL添加默认实现代码
///
/// 数据访问层的超级基类,所有数据库的数据访问基类都继承自这个超级基类,包括Oracle、SqlServer、Sqlite、MySql、Access等
///
publicabstractclass AbstractBaseDAL where T : BaseEntity, new()
{
///
/// 设置数据库配置项名称
///
///
数据库配置项名称
publicvirtualvoid SetDbConfigName(string dbConfigName)
{
this.dbConfigName = dbConfigName;
}
....................
}
3、在BaseBLL里面的Init函数进行调用设置处理
///
/// 参数赋值后,初始化相关对象
///
///
BLL业务类的全名(子类必须实现),子类构造函数传入this.GetType().FullName
///
数据访问层程序集的清单文件的文件名,不包括其扩展名。设置为NULL或默认为Assembly.GetExecutingAssembly().GetName().Name
///
BLL命名空间的前缀(BLL.)
///
数据库配置项名称
protectedvoid Init(string bllFullName, string dalAssemblyName = null, string bllPrefix = "BLL.")
{
.............
baseDal.SetDbConfigName(dbConfigName); //设置数据库配置项名称
}
4、在具体BLL层的业务类进行初始化处理。
///
/// 政策法规公告动态
///
publicclass Information : BaseBLL
{
public Information() : base()
{
base.Init(this.GetType().FullName, System.Reflection.Assembly.GetExecutingAssembly().GetName().Name, "BLL.", "annotherConfig" );
}
这样设置后,我们具体调用的代码不变,但是指定业务的数据库访问已经使用了特定的配置项名称了,如果配置项不存在,那么还是会获取默认的配置项进行处理了。
通过这样的实现步骤,我们就能实现在一个业务系统里面,分拆不同的数据库,进行统一管理,而且又不会增加额外的调用难度,对于我们很多业务表,这种框架的处理方式 ,应该是不错的。