日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Castle ActiveRecord学习实践(2):构建配置信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要: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為我們提供了三種方式的配置

1XmlConfigurationSource配置

可以使用自己的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)"

2InPlaceConfigurationSource配置

這種實現是一種硬編碼的方式,在實際的使用中并不推薦,但是有時候如果我們的配置信息是動態的獲取,則這種方式就會變得非常有用。

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>


一般的初始化工作我們會放在Application_ Start中,示例代碼

?

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>


2Oracle

<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>


3MySQL

?

<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>

?

4Firebird

?

<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>

?

5PostgreSQL

<activerecord>

????
<config>

????????
<add?key="hibernate.connection.driver_class"?value="NHibernate.Driver.NpgsqlDriver"?/>

????????
<add?key="hibernate.dialect"?value="NHibernate.Dialect.PostgreSQLDialect"?/>

????????
<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;"?/>

????
</config>

</activerecord>


關于ActiveRecord構建配置信息的介紹就這么多了,內容比較簡單。下篇文章中我會詳細介紹ActiveRecord中的映射,希望研究過Castle的朋友不吝賜教。

?

參考資料

Castle的官方網站http://www.castleproject.org

轉載于:https://www.cnblogs.com/Terrylee/archive/2006/04/05/367381.html

總結

以上是生活随笔為你收集整理的Castle ActiveRecord学习实践(2):构建配置信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。