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>
ActiveRecord多数据库配置的更多相关文章
- Castle.ActiveRecord多数据库配置
最近使用Castle.ActiveRecord框架,网上关于多数据支持的文章很少,因此有了这篇博文的产生. 开发工具VS2015,Sql Server2008R2 新建数据库,数据初始化脚本如下: - ...
- Castle连接多数据库配置
ActiveRecord 的多数据库配置基本沿袭了 NHibernate 的思想,只不过在配置文件结构上作了些调整.1. 采用继承方式,归纳使用同一数据库的类型.比如 A.B.C.D.E 中 A.B连 ...
- laravel5 数据库配置(MySQL)
laravel5 数据库配置(MySQL) 首先有一个安装完成可以运行的laravel框架. 配置database.php 进入laravel根目录. 在config目录下找到database.php ...
- discuz论坛移植修改数据库配置
从其他地方拷贝的discuz源码,可能需要修改数据库配置 分别打开discuz目录下面以下三个文件 discuzRoot/uc_server/data/config.inc.phpdiscuzRoot ...
- Spring 数据库配置用户名和密码加密
单个数据库配置 : 一般spring容器启动时,通过PropertyPlaceholderConfigurer类读取jdbc.properties文件里的数据库配置信息.通过这个原理,我们把加密后的数 ...
- atitit.动态加载数据库配置in orm hibernate mybatis
atitit.动态加载数据库配置in orm 1. 动态加载数据库配置的优点::: 1 1.1. 组合多个配置文件... 1 1.2. 连接多个数据库 1 2. 基本的流程:::getCfg内存对象, ...
- 如何修改opencms数据库配置
修改/webapps/opencms/WEB-INF/config/opencms.properties文件 什么情况下需要修改配置? 1. 使用过程中,修改数据库配置: 2. 太长时间没接触服务器, ...
- ThinkPHP讲解(五)——数据库配置及Model数据模型层、查询
数据库配置 在TP框架中要进行连接数据库操作,要进行配置 要在convertion.php中找到“数据库配置”,并复制到项目配置文件config.php中 Model模型层制作 model:数据库中每 ...
- tomcat字符,文档,数据库配置
修改tomcat目录下conf目录下的server.xml tomcat容器的解码配置 URIEncoding="UTF-8" <Connector port="8 ...
随机推荐
- 【BZOJ】3398: [Usaco2009 Feb]Bullcow 牡牛和牝牛(排列组合+乘法逆元+欧拉定理/费马小定理)
http://www.lydsy.com/JudgeOnline/problem.php?id=3398 以下牡牛为a,牝牛为b. 学完排列计数后试着来写这题,“至少”一词可以给我们提示,我们可以枚举 ...
- remote指令添加远程数据库
git remote add <name> <url> git remote add origin https://[your_space_id].backlogtool.co ...
- Leetcode: Merge/Insert Interval
题目 Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[ ...
- mysql如何用sql添加字段如何设置字符集和排序规则
alter table pay_company add sms_code2 varchar(16) CHARACTER SET UTF8 COLLATE utf8_general_ci DEFAULT ...
- js实现输入框联想搜索
实现点击和输入搜索联想,把搜索出的列表放到下面的ul列表中,然后再列表中选择并把公司名赋值给输入框,把guid赋值给隐藏域 html <input type="hidden" ...
- 理解CSS3 isolation: isolate的表现和作用
转自:http://www.zhangxinxu.com/wordpress/?p=5155 只要元素可以创建层叠上下文,就可以阻断mix-blend-mode! 于是,不仅仅是isolation:i ...
- Java Swing 日历 控件
这是我改写的网上的DateChooser代码后的作品,使用效果如图所示.用法参考备注,以及Main函数中用法. /** * * Copyright: Ares. * All Rights Reserv ...
- 使用Git分支开发新特性或修复Bug与使用Git分支开发新特性或修复Bug
使用Git分支开发新特性或修复Bug 通过分支,可以在不影响原有代码的前提下改变代码,主要用于开发新功能新特性.下 一代产品 为已经发布的正式版修复bug 团队开发时为每个人建立一个分支,从而避免相互 ...
- Hibernate-sessio缓存的操作
首先咋们看一个图: flush:首先箭头是由缓存指向数据库,即当我调用 Session.flush()方法时它会强制使数据库的记录跟缓存 中的对象状态保持同步 ,如果不一致,就会发送Sql语句 ,保持 ...
- freenas 11.2踩过的坑
修改SMB最小协议 服务器最小协议由FreeNAS上的sysctl控制. 在System-> Tunables 下添加sysctl来使其永久化:Variable = freenas.servic ...