ActiveRecord多数据库配置

ActiveRecord 的多数据库配置基本沿袭了 NHibernate 的思想,只不过在配置文件结构上作了些调整。NHibernate的配置也是基于配置得来的,配置多个SessionFactory传入多个Base类
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>
时间: 2024-12-29 23:19:51

ActiveRecord多数据库配置的相关文章

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]

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 : ActiveR

【转】NHibernate 各种数据库配置

转载自:http://terrylee.cnblogs.com/archive/2006/04/05/367381.html 自己只用了Oracle 可用! 三.常见的配置示例 Castle网站为我们提供的几个常见的配置示例1.MS SQLServer <activerecord> <config> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlC

PLSQL Develope连接oracle数据库配置

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

zend framework2 实现多数据库配置使用的另一种方法

相比之前我发过的第一种在zend framework2中实现多数据库配置使用的方法:http://blog.csdn.net/a437629292/article/details/41121455:我更喜欢一下这种方法! 别急,听我慢慢道来. 1. 问题:第一种方法(参见上述连接),是没实例化一个model,都去实例化一个数据库适配器,这样是不是有点浪费资源呢? 所以,本人一直不满意这种实现方式,一直在寻找如何能一个请求(无论包含多少个model的调用),甚至从项目启动后,就只实例化一次数据库适

mysql主从数据库配置

在这里吧昨天做的主从数据库配置记录下来,免得以后折腾 数据库主从配置心得: master : 192.168.16.247 slave1 : 192.168.16.248 1 修改配置文件 /etc/mysql/my.cnf(如果my.cnf已有该配置项,则相应的进行修改) 主数据库: server-id = 1 log-bin = mysql-bin log-bin-index = mysql-bin.index #log_bin = /var/log/mysql/mysql-bin.log

应用程序初次运行数据库配置小程序(Java版)

应用程序初始化数据库配置小程序 之前写过一个Java版的信息管理系统,但部署系统的时候还需要手动的去配置数据库和导入一些初始化的数据才能让系统运行起来,所以我在想是不是可以写一个小程序在系统初次运行的时候自动部署数据库和导入一些初始化数据.然后就有了以下的思路: 在应用程序入口处判断数据库是否已经配置完成,若配置完成则进入正常的登录系统完成正常操作即可,若未配置则进入数据库配置的小程序完成数据库配置然后再进入系统,但如何来判断是否已经配置完成呢,在这里我用的是比较原始的方法,配置数据库的时候系统

Fluent Nhibernate 数据库配置

一.Access数据库配置 NHibernate本身不支持Access数据库,一开始看网上各种文档,捣敲浪费了N分钟.还是祭起Nuget神器引用NHibernate.JetDrive.代码如下,搞定收工... private string FilePath { get; set; } private ISessionFactory BuildSessionFactory() { var connectionString = string.Format("Provider=Microsoft.Je

atitit.动态加载数据库配置in orm hibernate mybatis

atitit.动态加载数据库配置in orm 1. 动态加载数据库配置的优点::: 1 1.1. 组合多个配置文件... 1 1.2. 连接多个数据库 1 2. 基本的流程:::getCfg内存对象,,,,生成工厂类,在opoenSession 1 2.1. Hibernate动态添加配置流程 1 2.2. mybatis动态添加配置流程 1 2.3. #===hb code 2 3. 参考 3 1. 动态加载数据库配置的优点::: 1.1. 组合多个配置文件... 1.2. 连接多个数据库 2