Castle ActiveRecord學習實踐(2):構建配置信息

摘要:ActiveRecord在底層封裝了NHibernate,在框架啓動時須要指定相關的配置信息,那麼咱們須要配置些什麼?又該如何去配置呢?本文將會介紹在ActiveRecord中構建配置信息。算法

主要內容sql

1.須要配置什麼數據庫

2.如何去配置緩存

3.常見的配置示例網絡

 

一.須要配置什麼session

在第一篇你們都已經看到了,其實咱們的配置信息跟用NHibernate時的配置是同樣的,這是由於ActiveRecord在底層封裝了NHibernate。爲了沒有用過NHibernate的朋友,這裏再把配置信息簡單介紹一下。框架

1.配置NHibernate ADO.NET屬性 ide

 

屬性名函數

 

說明學習

 

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的朋友不吝賜教。

相關文章
相關標籤/搜索