Castle ActiveRecord学习实践(2):构建配置信息
2006-04-05 12:38:00
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://terrylee.blog.51cto.com/342737/67657 | ||||||||||||||||||||||||||||||||||||||||||||||
摘要:ActiveRecord在底层封装了NHibernate,在框架启动时需要指定相关的配置信息,那么我们需要配置些什么?又该如何去配置呢?本文将会介绍在ActiveRecord中构建配置信息。
主要内容
1.需要配置什么
2.如何去配置
3.常见的配置示例
一.需要配置什么
在第一篇大家都已经看到了,其实我们的配置信息跟用NHibernate时的配置是一样的,这是因为ActiveRecord在底层封装了NHibernate。为了没有用过NHibernate的朋友,这里再把配置信息简单介绍一下。
1.配置NHibernate ADO.NET属性
2.可选的配置属性
除了上面的ADO.NET属性之外,我们还有如下的可选属性
可以数据库设置一个hibernate.dialect方言,它是NHibernate.Dialect.Dialect 的一个子类。如果不需要使用基于native或者sequence的主键自动生成算法,或者悲观锁定(使用ISession.Lock() 或者 IQuery.SetLockMode())的话,方言就可以不必指定。然而,假若你指定了一个方言,Hibernate会为上面列出的一些属性使用特殊默认值,省得我们手工指定。
NHibernate SQL 方言对照表:
二.如何去配置
ActiveRecord为我们提供了三种方式的配置
1.XmlConfigurationSource配置
可以使用自己的XML文件来保存配置信息,例如有一个MyConfig.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=.;Initial Catalog=ARDemo;UID=sa;Password=sa" />![]() </config>![]() </activerecord> 这时候我们在框架初始化的时候就应该这样写:
XmlConfigurationSource source = new XmlConfigurationSource("MyConfig.xml");![]() ActiveRecordStarter.Initialize(source,typeof(ActiveRecordBase));其中XmlConfigurationSource通过重载提供了如下三个公用的构造函数
public XmlConfigurationSource(String xmlFileName)
public XmlConfigurationSource(Stream stream)
public XmlConfigurationSource(TextReader reader)
不管是以文件名还是Stream形式或者TextReader,在XmlConfigurationSource的内部都会转换为XmlDocument。最后要注意xml文件的路径,可以用生成后事件命令拷贝.xml文件到bin目录下
copy "$(ProjectDir)\*.xml" "$(TargetDir)"
2.InPlaceConfigurationSource配置
这种实现是一种硬编码的方式,在实际的使用中并不推荐,但是有时候如果我们的配置信息是动态的获取,则这种方式就会变得非常有用。
InPlaceConfigurationSource source = new InPlaceConfigurationSource();![]() ![]() Hashtable properties = new Hashtable();![]() ![]() properties.Add("hibernate.connection.driver_class", "NHibernate.Driver.SqlClientDriver");![]() properties.Add("hibernate.dialect", "NHibernate.Dialect.MsSql2000Dialect");![]() properties.Add("hibernate.connection.provider", "NHibernate.Connection.DriverConnectionProvider");![]() properties.Add("hibernate.connection.connection_string", "UID=sa;Password=19811218;Initial Catalog=ARDemo;Data Source=.");![]() ![]() source.Add( typeof(ActiveRecordBase), properties );![]() ![]() ActiveRecordStarter.Initialize( source, typeof(ActiveRecordBase) );3.使用应用程序配置文件 这种方式是最为常见的一种,即使用应用程序的配置文件(Web.config 或者App.config),在配置文件中
<?xml version="1.0" encoding="utf-8" ?>![]() <configuration>![]() <configSections>![]() <section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />![]() </configSections>![]() <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="UID=sa;Password=sa;Initial Catalog=ARDemo;Data Source=." />![]() </config>![]() </activerecord>![]() </configuration>[.NET1.1]
IConfigurationSource source = System.Configuration.ConfigurationSettings.GetConfig("activerecord") as IConfigurationSource;![]() ActiveRecordStarter.Initialize( source, typeof(ActiveRecordBase) ); [.NET2.0] IConfigurationSource source = System.Configuration. ConfigurationManager.GetSection ("activerecord") as IConfigurationSource;![]() ActiveRecordStarter.Initialize( source, typeof(ActiveRecordBase) );4.在Web应用程序中的配置 如果我们是在Web应用程序中使用ActiveRecord,需要指定isWeb="true",如下
<activerecord isWeb="true">![]() <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="UID=sa;Password=sa;Initial Catalog=ARDemo;Data Source=." />![]() </config>![]() </activerecord> protected void Application_Start(Object sender, EventArgs e)![]() {![]() IConfigurationSource source = ![]() System.Configuration.ConfigurationSettings.GetConfig("activerecord") as IConfigurationSource;![]() ![]() ActiveRecordStarter.Initialize( source, typeof(ActiveRecordBase));![]() }三.常见的配置示例
Castle网站为我们提供的几个常见的配置示例
1.MS SQLServer <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=.;Initial Catalog=test;UID=sa;Password=sa" />![]() </config>![]() </activerecord>2.Oracle
<activerecord>![]() <config>![]() <add key="hibernate.connection.driver_class" value="NHibernate.Driver.OracleClientDriver" />![]() <add key="hibernate.dialect" value="NHibernate.Dialect.OracleDialect" />![]() <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />![]() <add key="hibernate.connection.connection_string" value="Data Source=dm;User ID=dm;Password=dm;" />![]() </config>![]() </activerecord> <activerecord>![]() <config>![]() <add key="hibernate.connection.driver_class" value="NHibernate.Driver.MySqlDataDriver" />![]() <add key="hibernate.dialect" value="NHibernate.Dialect.MySQLDialect" />![]() <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />![]() <add key="hibernate.connection.connection_string" value="Database=test;Data Source=someip;User Id=blah;Password=blah" />![]() </config>![]() </activerecord> <activerecord>![]() <config>![]() <add key="hibernate.connection.driver_class" value="NHibernate.Driver.FirebirdDriver" />![]() <add key="hibernate.dialect" value="NHibernate.Dialect.FirebirdDialect" />![]() <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />![]() <add key="hibernate.connection.connection_string" value="Server=localhost;Database=d:\db.fdb;User=SYSDBA;password=masterkey;ServerType=1;Pooling=false" />![]() <add key="hibernate.query.substitutions" value="true 1, false 0" />![]() </config>![]() </activerecord>5.PostgreSQL
<activerecord>![]() <config> |








}