由于最近的要做的项目周期时间是短了,因此把 ActiveRecord给用上了。
1.我们会发现,ActiveRecord 通过使用公用基类的方式来实现多个数据库连接配置的。只要继承自指定的基类,我们就可以使用不同的目标数据库。在配置文件中我们通过增加多个 Config Section,同时指定 Config Type 属性,就可以让 ActiveRecord 使用多数据库配置。Config Type 就是我们编写的基类,所有继承自该基类的类型都会使用该连接配置,而那些直接继承自 ActiveRecordBase 的类型还是使用缺省的连接配置。
(1) 必须继承自 ActiveRecordBase。
(2) 必须是抽象类。
(3) 可以不添加 [ActiveRecord()] 特性。
(4) 必须初始化抽象基类。如 "ActiveRecordStarter.Initialize(source, typeof(Test1Base ));" ,如果使用 "ActiveRecordStarter.Initialize(Assembly.GetExecutingAssembly(), source);" 那么就给抽象基类添加 "[ActiveRecord()]" 即可。
结果用着用着问题就来了。者碰上配置多数据库怎么办啊,后来网上也找了一些资料。
老是报错:“Could not obtain type from name '{0}',项目的类名”,
把源代码拿来研究研究,问题找到了:
在 ActiveRecord 源码中,文件目录是这样的:/Castle/Castle-all/ActiveRecord/Castle.ActiveRecord/Framework/Config/XmlConfigurationSource.cs
把文件打开,再这样给他一改改哈哈行啦。。
其中不同的数据库的访问方式跟网上说的都差不多。 因为使用的GetType()这玩意儿不行,不同程序集无法获取类型
必须指明一个程序集的名称
如下配置:
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.CLZ"> <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.CLZ"> <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>