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

  1. public abstract class Test1Base : ActiveRecordBase
  2. {
  3. }
  4.  
  5. public abstract class Test2Base : ActiveRecordBase
  6. {
  7. }
  8.  
  9. [ActiveRecord("A")]
  10. public class A : Test1Base
  11. {
  12. }
  13.  
  14. [ActiveRecord("B")]
  15. public class B : Test1Base
  16. {
  17. }
  18.  
  19. [ActiveRecord("C")]
  20. public class C : Test2Base
  21. {
  22. }
  23.  
  24. [ActiveRecord("D")]
  25. public class D : Test2Base
  26. {
  27. }
  28.  
  29. [ActiveRecord("E")]
  30. public class E : ActiveRecordBase
  31. {
  32. }

config.xml

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <activerecord>
  3.  
  4. <config>
  5. <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
  6. <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
  7. <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
  8. <add key="hibernate.connection.connection_string" value="Data Source=localhost;Initial Catalog=Test;UID=sa;Password=sa" />
  9. </config>
  10.  
  11. <config type="ConsoleApplication1.CastleActiveRecord.Test1Base , Learn.CUI">
  12. <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
  13. <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
  14. <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
  15. <add key="hibernate.connection.connection_string" value="Data Source=localhost;Initial Catalog=Test1;UID=sa;Password=sa" />
  16. </config>
  17.  
  18. <config type="ConsoleApplication1.CastleActiveRecord.Test2Base , Learn.CUI">
  19. <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
  20. <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
  21. <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
  22. <add key="hibernate.connection.connection_string" value="Data Source=localhost;Initial Catalog=Test2;UID=sa;Password=sa" />
  23. </config>
  24. </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()]" 即可。
下面是一个相对完整的代码演示。

  1. namespace ConsoleApplication1.CastleActiveRecord
  2. {
  3. [ActiveRecord()]
  4. public abstract class Base : ActiveRecordBase
  5. {
  6. }
  7.  
  8. [ActiveRecord("Users")]
  9. public class User : Base
  10. {
  11. private int id;
  12.  
  13. [PrimaryKey(PrimaryKeyType.Identity)]
  14. public int Id
  15. {
  16. get { Console.WriteLine("Id..."); return id; }
  17. set { id = value; }
  18. }
  19.  
  20. private string name;
  21.  
  22. [Property(Unique=true)]
  23. public string Name
  24. {
  25. get { return name; }
  26. set { name = value; }
  27. }
  28. }
  29.  
  30. public class ActiveRecordTest
  31. {
  32. static ActiveRecordTest()
  33. {
  34. // 获取数据库连接配置
  35. XmlConfigurationSource source = new XmlConfigurationSource(@"Config/ActiveRecord.xml");
  36.  
  37. // 载入程序集中所有 ActiveRecord 类。
  38. ActiveRecordStarter.Initialize(Assembly.GetExecutingAssembly(), source);
  39.  
  40. // 自主载入指定类型
  41. //ActiveRecordStarter.Initialize(source, typeof(ActiveRecordBase), typeof(User), typeof(Base));
  42.  
  43. // 删除数据库架构
  44. //ActiveRecordStarter.DropSchema();
  45.  
  46. // 创建数据库架构(该方法会删除同名表后再创建)
  47. ActiveRecordStarter.CreateSchema();
  48. }
  49.  
  50. public static void Test()
  51. {
  52. User user = new User();
  53. user.Name = "tom" + new Random(DateTime.Now.Millisecond).Next();
  54.  
  55. ActiveRecordMediator.Create(user);
  56. }
  57. }
  58. }

ActiveRecord.xml

  1. <?xml version="1.0" encoding="utf-8" ?>
  2. <activerecord>
  3. <config>
  4. <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
  5. <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
  6. <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
  7. <add key="hibernate.connection.connection_string" value="Data Source=localhost;Initial Catalog=Test2;UID=sa;Password=sa" />
  8. </config>
  9.  
  10. <config type="ConsoleApplication1.CastleActiveRecord.Base, Learn.CUI">
  11. <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />
  12. <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />
  13. <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
  14. <add key="hibernate.connection.connection_string" value="Data Source=localhost;Initial Catalog=Test;UID=sa;Password=sa" />
  15. </config>
  16. </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. 《网络编程》非堵塞 I/O

    概述 在前面文章中,我们介绍了 I/O 的五种模型<I/O 模型>.从那里能够知道,非堵塞式的 I/O 是进程调用 I/O 操作时.若数据未准备就绪.则马上返回一个 EWOULDBLOCK ...

  2. 【剑指offer】翻转单词顺序

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/27372033 题目描写叙述: JOBDU近期来了一个新员工Fish,每天早晨总是会拿着一本 ...

  3. C++ map修改指定key的value

    对于修改C++指定key的value,网上查了很多,都说直接insert就会覆盖原来的值,是否是这样的呢?  C++ Code  12345678910111213141516171819202122 ...

  4. img与特殊布局下对浏览器渲染的剖析

    补白 在内联元素中,分为替换元素和非替换元素(不了解的同学可以百度一下),非替换元素是不可以设置尺寸的,而替换元素作为特殊的内联元素,由于其自身拥有尺寸属性,所以其的尺寸是可以进行再次设置的. 此文适 ...

  5. AWS系列-添加购买的https证书

    1.1 自行购买证书 1.2 上传证书 打开EC2的负载均衡 选择相应的ALB 添加侦听器 选择https 端口443 选择目标组 证书类型 上传证书到IAM 证书名称填写申请证书时候的那个域名 私有 ...

  6. WPF进阶之接口(4):ICommand实现详解

    上一章WPF进阶之接口():INotifyPropertyChanged,ICommand中我们遗留了几个问题,我将在本节中做出解释.在详细解释ICommand实现之前,我们现在关注一下什么是:弱引用 ...

  7. MD5骨骼动画模型加载

    前面我们分析了静态模型OBJ格式,桢动画模型MD2,这篇主要分析骨骼动画MD5的一些概念并且实现. 混合桢动画有计算简单,容易实现等优点,但是在需要比较细致的效果时,则需要更多的关键桢,每桢都添加相同 ...

  8. mysql支持跨表删除多条记录

    在Mysql4.0之后,mysql开始支持跨表delete. Mysql可以在一个sql语句中同时删除多表记录,也可以根据多个表之间的关系来删除某一个表中的记录. 假定我们有两张表:Product表和 ...

  9. 动态svg效果

    import React from 'react'; import TweenOne from 'rc-tween-one'; import SvgDrawPlugin from 'rc-tween- ...

  10. Java使用Apache POI进行Excel导入和导出

    Manve依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> ...