Castle连接多数据库配置

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 版本前可能有很多较大的变化,如演示代码无法编译,建议您参考最新版本的相关文档

时间: 2024-08-03 07:04:29

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

PLSQL Develope连接oracle数据库配置

首先我们在讲PLSQL Develope连接oracle数据库配置之前,先讲下如果不用PLSQL Develope连接oracle数据库,那该怎么办,那就是在本机安装oracle数据库,不过这个对于配置渣的笔记本来说是个挑战,而且界面长时间不操作就会卡死,只能强制关闭,用起来非常不方便,如果笔记本配置高,且不想费力用PLSQL,那可以考虑直接安装oracle客户端. 下面我们来看看如何用PLSQ连接oracle. 1.自行百度下载plsql客户端,个人比较喜欢从CSDN上下载,你们随意.下载好后

PL/SQL 连接Oracle数据库配置

找到Oracle安装目录, 在ADMIN文件夹下找到tnsnames.ora文件,打开该文件,添加要连接的数据库,示例: tht =  (DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.124.226)(PORT = 1521))    )    (CONNECT_DATA =      (SERVICE_NAME = orcl)    )  ) 注释:tht为自己为链接的数据库起的名字

hibernate简单连接mysql数据库配置

使用hibernate连接mysql数据库 1:项目搭建好之后,在lib包中添加必要的jar包,和mysql数据库驱动jar包: jar包可以在hibernate的下载包(hibernate3.3.2.GA)中找到,这里所需要的jar包是: hibernate3.jar,lib/required目录下的所有jar包; 连接数据库所需要的jar包:mysql-connector-java-5.1.7-bin.jar; 如图: 2:jar包引入后编写实体类及映射文件: 实体类是xx.java文件;映

Myeclipes连接Mysql数据库配置

相信大家在网站上也找到了许多关于myeclipes如何连接mysql数据库的解决方案,虽然每一步都按照他的步骤来,可到最后还是提示连接失败,有的方案可能应个人设备而异,配置环境不同导致.经过个人多方探索终于找到一个简单便捷的配置方案,供大家参考,有不足之处,希望大家留下宝贵的意见. 配置步骤: 1.首先要先安装MySQL和myeclipes(这个就不用一一讲述了) 2.下载数据库驱动工具jdbc(JDBC是连接mysql的一种Java规范,有了jdbc之后我们可以很方便的在自己的Java项目中连

Castle.ActiveRecord多数据库配置

最近使用Castle.ActiveRecord框架,网上关于多数据支持的文章很少,因此有了这篇博文的产生. 开发工具VS2015,Sql Server2008R2 新建数据库,数据初始化脚本如下: 1 --新建数据库Castle.ActiveRecord.DB1 2 CREATE DATABASE [Castle.ActiveRecord.DB1]; 3 GO 4 5 USE [Castle.ActiveRecord.DB1] 6 GO 7 /****** Object: Table [dbo]

远程连接mysql数据库配置

1. 配置连接端mysql设置 vim /etc/mysql/mysql.conf.d/mysql.cnf #更改mysql.conf文件第43行绑定地址为mysql主机的外网地址. 43 bind-address = 192.168.0.1 2. 主机授权. 主机进入mysql. 输入授权命令 grant all privileges on 授权的数据库.数据库中的具体表 to '连接端用户'@'连接端IP地址' identified by '连接端输入的密码' with grant opti

使用log4net连接Mysql数据库配置

log4net配置: //Author:GaoBingBing [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)] 必备的组件: 1.log4net.dll 2.MySql.Data.dll log4net.config: <?xml version="1.0" encoding="utf-8" ?> <c

PLSQL连接Oracle 数据库配置详解

1. 下载instantclient-basic-win32-11.2.0.1.0 (oracle官网下载地址:http://www.oracle.com/technetwork/topics/winsoft-085727.html , 下载地址2:http://download.csdn.net/detail/czw2010/5732241) 2. 解压instantclient-basic-win32-11.2.0.1.0并放置在oracle安装目录的product下(放置位置无强制要求,可

jmeter连接oracle数据库配置

1导入加载ojdbc.jar包(2种方法) 1)直接拷贝目录 2. 原文地址:https://www.cnblogs.com/byao-8816/p/10098045.html