Castle ActiveRecord学习实践(2):构建配置信息

来源:互联网 发布:hystrix 源码下载 编辑:程序博客网 时间:2024/06/05 17:31

摘要:ActiveRecord在底层封装了NHibernate,在框架启动时需要指定相关的配置信息,那么我们需要配置些什么?又该如何去配置呢?本文将会介绍在ActiveRecord中构建配置信息。

主要内容

1.需要配置什么

2.如何去配置

3.常见的配置示例

 

一.需要配置什么

在第一篇大家都已经看到了,其实我们的配置信息跟用NHibernate时的配置是一样的,这是因为ActiveRecord在底层封装了NHibernate。为了没有用过NHibernate的朋友,这里再把配置信息简单介绍一下。

1.配置NHibernate ADO.NET属性

 

属性名

 

说明

 

hibernate.connection.provider_class

 

 

定制

IConnectionProvider

的类型.

例如:

full.classname.of.ConnectionProvider

(如果提供者创建在NHibernate中), 或者

full.classname.of.ConnectionProvider, assembly

(如果使用一个自定义的IConnectionProvider接口的实现,它不属于NHibernate)。

 

hibernate.connection.driver_class

 

 

定制

IDriver

的类型.

full.classname.of.Driver

(如果驱动类创建在NHibernate中), 或者

full.classname.of.Driver, assembly

(如果使用一个自定义IDriver接口的实现,它不属于NHibernate)。

 

hibernate.connection.connection_string

 

 

用来获得连接的连接字符串。

 

hibernate.connection.isolation

 

 

设置事务隔离级别. 请检查

System.Data.IsolationLevel

来得到取值的具体意义并且查看数据库文档以确保级别是被支持的。

例如:

Chaos, ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Unspecified

 

2.可选的配置属性

除了上面的ADO.NET属性之外,我们还有如下的可选属性

 

属性名

 

说明

 

hibernate.dialect

 

 

NHibernate方言(Dialect)的类名 - 可以让NHibernate使用某些特定的数据库平台的特性

例如:

full.classname.of.Dialect

(如果方言创建在NHibernate中), 或者

full.classname.of.Dialect, assembly

(如果使用一个自定义的方言的实现,它不属于NHibernate)。

 

hibernate.default_schema

 

 

在生成的SQL中,scheml/tablespace的全限定名.

例如:

SCHEMA_NAME

 

 

hibernate.prepare_sql

 

 

是否准备sql语句

例如:

true

|

false

 

 

hibernate.session_factory_name

 

 

SessionFactory

被创建后将自动绑定这个名称.

例如:

some.name

 

 

hibernate.use_outer_join

 

 

允许使用外连接抓取。

例如:

true

|

false

 

 

hibernate.cache.provider_class

 

 

指定一个自定义的

CacheProvider

缓存提供者的类名

例如:

full.classname.of.CacheProvider

(如果ICacheProvider创建在NHibernate中), 或

full.classname.of.CacheProvider, assembly

(如果使用一个自定义的ICacheProvider,它不属于NHibernate)。

 

hibernate.query.substitutions

 

 

把NHibernate查询中的一些短语替换为SQL短语(比如说短语可能是函数或者字符)。

例如:

hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC

 

可以数据库设置一个hibernate.dialect方言,它是NHibernate.Dialect.Dialect 的一个子类。如果不需要使用基于native或者sequence的主键自动生成算法,或者悲观锁定(使用ISession.Lock() 或者 IQuery.SetLockMode())的话,方言就可以不必指定。然而,假若你指定了一个方言,Hibernate会为上面列出的一些属性使用特殊默认值,省得我们手工指定。

NHibernate SQL 方言对照表:

 

数据库系统

 

SQL方言

 

DB2

 

NHibernate.Dialect.DB2Dialect

 

 

PostgreSQL

 

NHibernate.Dialect.PostgreSQLDialect

 

 

MySQL

 

NHibernate.Dialect.MySQLDialect

 

 

Oracle (any version)

 

NHibernate.Dialect.OracleDialect

 

 

Oracle 9/10g

 

NHibernate.Dialect.Oracle9Dialect

 

 

Sybase

 

NHibernate.Dialect.SybaseDialect

 

 

Microsoft SQL Server 2000

 

NHibernate.Dialect.MsSql2000Dialect

 

 

Microsoft SQL Server 7

 

NHibernate.Dialect.MsSql7Dialect

 

 

Firebird

 

NHibernate.Dialect.FirebirdDialect

 

二.如何去配置

ActiveRecord为我们提供了三种方式的配置

1.XmlConfigurationSource配置

可以使用自己的XML文件来保存配置信息,例如有一个MyConfig.xml的文件

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客<?xml version="1.0" encoding="utf-8" ?>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客<activerecord>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    <config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.connection_string" value="Data Source=.;Initial Catalog=ARDemo;UID=sa;Password=sa" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    </config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客</activerecord>

 这时候我们在框架初始化的时候就应该这样写:

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客XmlConfigurationSource source = new XmlConfigurationSource("MyConfig.xml");

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客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配置

这种实现是一种硬编码的方式,在实际的使用中并不推荐,但是有时候如果我们的配置信息是动态的获取,则这种方式就会变得非常有用。

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客InPlaceConfigurationSource source = new InPlaceConfigurationSource();

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客Hashtable properties = new Hashtable();

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客properties.Add("hibernate.connection.driver_class", "NHibernate.Driver.SqlClientDriver");

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客properties.Add("hibernate.dialect", "NHibernate.Dialect.MsSql2000Dialect");

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客properties.Add("hibernate.connection.provider", "NHibernate.Connection.DriverConnectionProvider");

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客properties.Add("hibernate.connection.connection_string", "UID=sa;Password=19811218;Initial Catalog=ARDemo;Data Source=.");

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客source.Add( typeof(ActiveRecordBase), properties );

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客ActiveRecordStarter.Initialize( source, typeof(ActiveRecordBase) );

 

3.使用应用程序配置文件

这种方式是最为常见的一种,即使用应用程序的配置文件(Web.config 或者App.config),在配置文件中

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客<?xml version="1.0" encoding="utf-8" ?>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客<configuration>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    <configSections>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <section name="activerecord" type="Castle.ActiveRecord.Framework.Config.ActiveRecordSectionHandler, Castle.ActiveRecord" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    </configSections>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    <activerecord>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客            <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客            <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客            <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客            <add key="hibernate.connection.connection_string" value="UID=sa;Password=sa;Initial Catalog=ARDemo;Data Source=." />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        </config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    </activerecord>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客</configuration>

 

 

这时候我们的框架初始化代码应该这样写

[.NET1.1]

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客IConfigurationSource source = System.Configuration.ConfigurationSettings.GetConfig("activerecord") as IConfigurationSource;

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客ActiveRecordStarter.Initialize( source, typeof(ActiveRecordBase) ); 

 

[.NET2.0]

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客IConfigurationSource source = System.Configuration. ConfigurationManager.GetSection ("activerecord") as IConfigurationSource;

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客ActiveRecordStarter.Initialize( source, typeof(ActiveRecordBase) );

 

4.在Web应用程序中的配置

如果我们是在Web应用程序中使用ActiveRecord,需要指定isWeb="true",如下

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客<activerecord isWeb="true">

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    <config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.connection_string" value="UID=sa;Password=sa;Initial Catalog=ARDemo;Data Source=." />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    </config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客</activerecord>

 

 

一般的初始化工作我们会放在Application_ Start中,示例代码

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客protected void Application_Start(Object sender, EventArgs e)

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客{

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    IConfigurationSource source = 

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        System.Configuration.ConfigurationSettings.GetConfig("activerecord") as IConfigurationSource;

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    ActiveRecordStarter.Initialize( source, typeof(ActiveRecordBase));

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客}

 

三.常见的配置示例

Castle网站为我们提供的几个常见的配置示例

1.MS SQLServer

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客<activerecord>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    <config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.connection_string" value="Data Source=.;Initial Catalog=test;UID=sa;Password=sa" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    </config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客</activerecord>

 

2.Oracle

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客<activerecord>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    <config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.driver_class" value="NHibernate.Driver.OracleClientDriver" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.dialect" value="NHibernate.Dialect.OracleDialect" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.connection_string" value="Data Source=dm;User ID=dm;Password=dm;" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    </config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客</activerecord>

 

 

3.MySQL

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客<activerecord>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    <config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.driver_class" value="NHibernate.Driver.MySqlDataDriver" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.dialect" value="NHibernate.Dialect.MySQLDialect" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.connection_string" value="Database=test;Data Source=someip;User Id=blah;Password=blah" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    </config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客</activerecord>

4.Firebird

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客<activerecord>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    <config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.driver_class" value="NHibernate.Driver.FirebirdDriver" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.dialect" value="NHibernate.Dialect.FirebirdDialect" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.connection_string" value="Server=localhost;Database=d:/db.fdb;User=SYSDBA;password=masterkey;ServerType=1;Pooling=false" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.query.substitutions" value="true 1, false 0" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    </config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客</activerecord>

5.PostgreSQL

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客<activerecord>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    <config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.driver_class" value="NHibernate.Driver.NpgsqlDriver" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.dialect" value="NHibernate.Dialect.PostgreSQLDialect" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客        <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />

        <add key="hibernate.connection.connection_string" value="Server=localhost;initial catalog=nhibernate;User ID=nhibernate;Password=nhibernate;" />

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客    </config>

Castle ActiveRecord学习实践(2):构建配置信息  - 网络一小人物 - 网络一小人物的博客</activerecord>

 

关于ActiveRecord构建配置信息的介绍就这么多了,内容比较简单。下篇文章中我会详细介绍ActiveRecord中的映射,希望研究过Castle的朋友不吝赐教。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 200万存银行一年利息多少 10万存银行好还是余额宝好 十万存银行一年多少利息 一万存一年利息多少 五十万存银行一年有多少利息 40万存银行一年利息多少 20万存定期三年利息 二十万存定期一年利息多少 20万存银行一年利息是多少 10万存3年定期利息是多少 100万存银行一个月利息多少 20万存余额宝一天收益多少 十万存一年定期利息是多少 十万存定期一年利息多少 10万存银行一年利息多少 一万存三个月利息多少 15万存银行一年利息多少 十万存余额宝一年收益多少 5万存银行一年利息多少 2018存款20万存3年利息会有多少 大额存单20万存一年有多少钱 10万存定期还是买理财 3万存银行一年利息多少 800万存银行一年利息多少 2万存银行一年利息多少 1000万存银行一年多少利息 一万存余额宝一天利息 三十万存银行一年利息多少 2018年20万存3年定期利息多少钱 5万存余额宝一天多少钱 20万存支付宝一天有多少利息 十万存三年定期利息是多少 20万存一年定期利息多少 学霸天师是网红 万学教育 千学万学学做真人 万学海文网校 万学教育集团海文考研 万学教育海文考研 万学教育海文考研网站 学远教育