根据文档,如果要AR同时访问两个数据库,可以通过继承ActiveRecordBase来完成,貌似如下的形式:
[ActiveRecord]
public abstract class AClass<T> : ActiveRecordBase<T>
{
}
[ActiveRecord]
public abstract class BClass<T> : ActiveRecordBase<T>
{
}
配置文件中,应该进行如下设置:
<activerecord isDebug="true">
<config>
<add key="connection.driver_class" value="NHibernate.Driver.OracleClientDriver" />
<add key="dialect" value="NHibernate.Dialect.Oracle9iDialect" />
<add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="connection.connection_string" value="Data Source=test;User ID=name;Password=password;" />
<add key="show_sql" value="true" />
<add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle" />
</config>
<config type="BClass`1, testNameSpace">
<add key="connection.driver_class" value="NHibernate.Driver.OracleClientDriver" />
<add key="dialect" value="NHibernate.Dialect.Oracle9iDialect" />
<add key="connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="connection.connection_string" value="Data Source=test2;User ID=name2;Password=password2;" />
<add key="show_sql" value="true" />
<add key="proxyfactory.factory_class" value="NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle" />
</config>
</activerecord>
注意,BClass是泛型类型,在配置文件中,类名要以`1结尾。“testNameSpace”告诉ActiverRecord去哪个装配集中找BClass<T>类。第一个config文件中,不要指定type,这是默认的配置文件。
最后,以下是我的初始化代码:
var source = new XmlConfigurationSource(ConfigPath + ActiveRecordConfigFile);
ActiveRecordStarter.Initialize(source, typeof(BClass), typeof(AClass));