ActiveRecord 的多数据库配置基本沿袭了 NHibernate 的思想,只不过在配置文件结构上作了些调整。
1. 采用继承方式,归纳使用同一数据库的类型。比如 A、B、C、D、E 中 A、B连接到数据库Test1,C、D连接到Test2,而E连接到缺省的Test,那么具体的代码就会是下面这种方式。

public abstract class Test1Base : ActiveRecordBase
{
} public abstract class Test2Base : ActiveRecordBase
{
} [ActiveRecord("A")]
public class A : Test1Base
{
} [ActiveRecord("B")]
public class B : Test1Base
{
} [ActiveRecord("C")]
public class C : Test2Base
{
} [ActiveRecord("D")]
public class D : Test2Base
{
} [ActiveRecord("E")]
public class E : ActiveRecordBase
{
}

config.xml

<?xml version="1.0" encoding="utf-8" ?>
<activerecord> <config>
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.connection.connection_string" value="Data Source=localhost;Initial Catalog=Test;UID=sa;Password=sa" />
</config> <config type="ConsoleApplication1.CastleActiveRecord.Test1Base , Learn.CUI">
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.connection.connection_string" value="Data Source=localhost;Initial Catalog=Test1;UID=sa;Password=sa" />
</config> <config type="ConsoleApplication1.CastleActiveRecord.Test2Base , Learn.CUI">
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.connection.connection_string" value="Data Source=localhost;Initial Catalog=Test2;UID=sa;Password=sa" />
</config>
</activerecord>

我们会发现,ActiveRecord 通过使用公用基类的方式来实现多个数据库连接配置的。只要继承自指定的基类,我们就可以使用不同的目标数据库。在配置文件中我们通过增加多个 Config Section,同时指定 Config Type 属性,就可以让 ActiveRecord 使用多数据库配置。Config Type 就是我们编写的基类,所有继承自该基类的类型都会使用该连接配置,而那些直接继承自 ActiveRecordBase 的类型还是使用缺省的连接配置。
上面的例子使用了 SQL Server 2000 的不同数据库,同样我们也可以连接到不同的数据库系统,如 A、B 连接到 SQL Server,C、D 连接到 DB2 等等。
2. 基类需要遵循一定的规则。
(1) 必须继承自 ActiveRecordBase。
(2) 必须是抽象类。
(3) 可以不添加 [ActiveRecord()] 特性。
(4) 必须初始化抽象基类。如 "ActiveRecordStarter.Initialize(source, typeof(Test1Base ));" ,如果使用 "ActiveRecordStarter.Initialize(Assembly.GetExecutingAssembly(), source);" 那么就给抽象基类添加 "[ActiveRecord()]" 即可。
下面是一个相对完整的代码演示。

namespace ConsoleApplication1.CastleActiveRecord
{
[ActiveRecord()]
public abstract class Base : ActiveRecordBase
{
} [ActiveRecord("Users")]
public class User : Base
{
private int id; [PrimaryKey(PrimaryKeyType.Identity)]
public int Id
{
get { Console.WriteLine("Id..."); return id; }
set { id = value; }
} private string name; [Property(Unique=true)]
public string Name
{
get { return name; }
set { name = value; }
}
} public class ActiveRecordTest
{
static ActiveRecordTest()
{
// 获取数据库连接配置
XmlConfigurationSource source = new XmlConfigurationSource(@"Config/ActiveRecord.xml"); // 载入程序集中所有 ActiveRecord 类。
ActiveRecordStarter.Initialize(Assembly.GetExecutingAssembly(), source); // 自主载入指定类型
//ActiveRecordStarter.Initialize(source, typeof(ActiveRecordBase), typeof(User), typeof(Base)); // 删除数据库架构
//ActiveRecordStarter.DropSchema(); // 创建数据库架构(该方法会删除同名表后再创建)
ActiveRecordStarter.CreateSchema();
} public static void Test()
{
User user = new User();
user.Name = "tom" + new Random(DateTime.Now.Millisecond).Next(); ActiveRecordMediator.Create(user);
}
}
}

ActiveRecord.xml

<?xml version="1.0" encoding="utf-8" ?>
<activerecord>
<config>
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.connection.connection_string" value="Data Source=localhost;Initial Catalog=Test2;UID=sa;Password=sa" />
</config> <config type="ConsoleApplication1.CastleActiveRecord.Base, Learn.CUI">
<add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
<add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.connection.connection_string" value="Data Source=localhost;Initial Catalog=Test;UID=sa;Password=sa" />
</config>
</activerecord>

-----------------
附:本文所有演示代码使用 2006-01-01 发布的 Castle ActiveRecord Beta3 版本。
Castle ActiveRecord 在发布 1.0 版本前可能有很多较大的变化,如演示代码无法编译,建议您参考最新版本的相关文档

Castle连接多数据库配置的更多相关文章

  1. PLSQL Develope连接oracle数据库配置

    首先我们在讲PLSQL Develope连接oracle数据库配置之前,先讲下如果不用PLSQL Develope连接oracle数据库,那该怎么办,那就是在本机安装oracle数据库,不过这个对于配 ...

  2. plsql+绿色版oracle连接远程数据库配置及提示缺少msvcr71.dll解决方法

    之前一直用的sqldeveloper连接oracle数据库,这个免费而且也是官方出品,除了体积略大启动略慢外,也没什么不好的.. 一次偶然机会决定试一下plsql,整理一下安装资料,需要本地oracl ...

  3. Myeclipes连接Mysql数据库配置

    相信大家在网站上也找到了许多关于myeclipes如何连接mysql数据库的解决方案,虽然每一步都按照他的步骤来,可到最后还是提示连接失败,有的方案可能应个人设备而异,配置环境不同导致.经过个人多方探 ...

  4. jmeter连接mysql数据库配置

    用jmeter连接mysql数据库,在配置的过程中遇到了几个坑,跟大家分享一下,避免人人踩坑~~ 关于驱动包:大部分时候是需要下载与服务器的mysql相同版本的jar包~~ 关于驱动包路径:不是所有的 ...

  5. Django连接MySQL数据库配置

    1.自己手动创建数据库 create database 数据库名; # 如: create database bms character set utf8; # 授权访问: grant all pri ...

  6. hibernate简单连接mysql数据库配置

    使用hibernate连接mysql数据库 1:项目搭建好之后,在lib包中添加必要的jar包,和mysql数据库驱动jar包: jar包可以在hibernate的下载包(hibernate3.3.2 ...

  7. Castle.ActiveRecord多数据库配置

    最近使用Castle.ActiveRecord框架,网上关于多数据支持的文章很少,因此有了这篇博文的产生. 开发工具VS2015,Sql Server2008R2 新建数据库,数据初始化脚本如下: - ...

  8. django连接mysql数据库配置,出现no module named mysqldb报错

    作为一个菜鸟运维也是要有梦想的,万一学会了python走向人生巅峰了呢.好吧,都是瞎想,今天主要介绍下django配置,最近也开始摸索这个牛b框架了,当然大佬肯定不屑一顾,都是照顾照顾我们这些菜鸟初学 ...

  9. 使用log4net连接Mysql数据库配置

    log4net配置: //Author:GaoBingBing [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net ...

随机推荐

  1. Javascript特效代码大全(420个)(转)

    转载自:Javascript特效代码大全(420个) 收集资料,以便使用+面试+学习  ├ Cookie脚本 ├ 随访问次数变提示 ├ 集成Cookies ├ 使窗口仅弹出一次 ├ 签名提示程序 ├ ...

  2. linux改动登陆主机提示信息

    寻常管理着130多台Linux物理主机.真正搞清楚每一台主机的IP信息.应用部署比較麻烦! 所以在部署之初,必须规划好: 写一个脚本.把主机IP.管理员联系方法,应用部署等主机信息放在.sh里面 sh ...

  3. javascript实现打印功能

    <input name="b_print" type="button" class="ipt" onClick="print ...

  4. 说说JSON和JSONP 也许你会豁然开朗

    说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决 前言 由于Sencha Touch 2这种开发模式的特性,基本决定了它原生的数据交互行为几乎只 ...

  5. MathType模板不见了如何处理

    MathType是一款在编辑公式方面非常好用的软件!并广泛应用在文档编辑与期刊排版中.但是新手用户在使用MathType编辑公式时会遇到一些处理不了的状况,这个时候就需要去找一些相关的教程来解决问题. ...

  6. 怎么隐藏MathType标尺

    因为MathType公式编辑能力非常的好用,所以非常的受大家的欢迎.MathType用现有的模板可以直接输入输出各种公式,而且MathType中有着各式各样的数学符号满足了大家日常公式的需求,为大家的 ...

  7. 推荐一个 HTML5在线的流程图工具——ProcessOn

    一直想找个简单好用的UML建模工具,无意在茫茫百度中看见了网友推荐的N多工具,从中找了一个叫 ProcessOn 的工具,可以说非常棒.如果我是WEB开发人员,我肯定去深入研究HTML5啦,太令人着迷 ...

  8. Effective C++ Item 10,11 Have assignment operators return a reference to *this Handle assignment to self in operator =

    If you want to concatenate assignment like this int x, y, z; x = y = z = 15; The convention is to ma ...

  9. measure layout onMeasure() onLayout()

    1.onMeasure() 在这个函数中,ViewGroup会接受childView的请求的大小,然后通过childView的 measure(newWidthMeasureSpec, heightM ...

  10. Maven开发系统

    Maven的优点: 自动从互联网中获取jar包,并实现了一步构建. pom.xml的配置 依赖管理(导入对应的jar包) 通过坐标(定位到仓库中的包的位置,并将jar包导入到项目中,如果版本升级,只需 ...