一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

NHibernate 2.0 參考文檔 - 03 配置

 昵稱10504424 2014-03-31

3. 配置

  由于NHibernate是為了能在各種不同環(huán)境下工作而設(shè)計(jì)的, 因此存在著大量的配置參數(shù).

  幸運(yùn)的是多數(shù)配置參數(shù)都 有比較直觀的默認(rèn)值, 并有隨Hibernate一同分發(fā)的配置樣例 App.config(位于src\NHibernate.Test)來(lái)展示各種配置選項(xiàng).

  所需做的僅僅是將這個(gè)樣例文件復(fù)制到自己的項(xiàng)目路徑下并做一些自定義的修改.


  一個(gè)NHibernate.Cfg.Configuration實(shí)例代表了一個(gè)應(yīng)用程序中.NET類(lèi)型 到SQL數(shù)據(jù)庫(kù)映射的完整集合.

  Configuration被用來(lái)構(gòu)建一個(gè)(不可變的 (immutable)) ISessionFactory. 映射定義則由不同的XML映射定義文件編譯而來(lái)。

  你可以直接實(shí)例化Configuration來(lái)獲取一個(gè)實(shí)例, 下面是一個(gè)例子如何加載兩個(gè)xml映射文件。

  另一個(gè)方法(有時(shí)候可能會(huì)更好),讓NHibernate從嵌入式資源里面加載映射文件:

  NHibernate將會(huì)在當(dāng)前應(yīng)用程序集中中尋找名字為NHibernate.Auction.Item.hbm.xmlNHibernate.Auction.Bid.hbm.xml嵌入式資源文件. 這種方式消除了任何對(duì)文件名的硬編碼(hardcoded).

  還有一種方法(應(yīng)該是最好的),讓NHibernate自動(dòng)到程序集加載所有的嵌入式資源xml映射文件。

  NHibernate會(huì)自動(dòng)到應(yīng)用程序集里查找所有的以.hbm.xml結(jié)尾的資源文件。這種方式消除了任何對(duì)文件名的硬編碼(hardcoded), 并且確保了應(yīng)用程序集里的所有的xml映射文件都被加載。

  如果使用Visual Studio .NET 和 NAnt 來(lái)編譯應(yīng)用程序集的話,請(qǐng)確保.hbm.xml文件被作為嵌入式資源編譯進(jìn)應(yīng)用程序集。

Configuration也允許你指定配置屬性:

  Configuration實(shí)例被設(shè)計(jì)成啟動(dòng)期間(configuration-time)對(duì)象, 一旦ISessionFactory創(chuàng)建完成它就被丟棄了。


  當(dāng)所有映射定義被Configuration解析后, 應(yīng)用程序必須獲得一個(gè)用于構(gòu)造ISession實(shí)例的工廠。 這個(gè)工廠將被應(yīng)用程序的所有線程共享:

  NHibernate允許你的應(yīng)用程序創(chuàng)建多個(gè)ISessionFactory實(shí)例。這對(duì)使用多個(gè)數(shù)據(jù)庫(kù)的應(yīng)用來(lái)說(shuō)很有用。


  ISessionFactory可以通過(guò)用戶自己創(chuàng)建的ADO.NET連接創(chuàng)建一個(gè)ISession, 這樣的設(shè)計(jì)可以讓你讓你們的程序更方便的獲取數(shù)據(jù)庫(kù)連接:

  注意不要用同一個(gè)ADO.NET打開(kāi)兩個(gè)不同的ISession


  另一種方法就是,你可以讓ISessionFactory替你打開(kāi)連接。ISessionFactory必須事先知道ADO.NET連接的參數(shù),有幾種不同的方法設(shè)置參數(shù):

  如果你使用這種方法,打開(kāi)一個(gè)ISession是非常簡(jiǎn)單的:

  所有的NHibernate屬性名和約束都在 NHibernate.Cfg.Environment類(lèi)中定義。我們討論一下ADO.NET連接配置最重要的幾項(xiàng)設(shè)置:

  假若你設(shè)置了如下的屬性,NHibernate會(huì)使用ADO.NET Data Provider來(lái)得到連接:

表 3.1. NHibernate ADO.NET 屬性

屬性名 用途
connection.provider_class 實(shí)現(xiàn)IConnectionProvider接口的類(lèi)型。

例如: (如果是NHibernate內(nèi)部的IConnectionProvider實(shí)現(xiàn)類(lèi))full.classname.of.ConnectionProvider,(如果是自定義的NHibernate外部的IConnectionProvider實(shí)現(xiàn)類(lèi) )full.classname.of.ConnectionProvider, assembly。

connection.driver_class 如果使用DriverConnectionProvider,實(shí)現(xiàn)IDriver接口的類(lèi)型。

(如果是NHibernate內(nèi)部的實(shí)現(xiàn)的IDriver類(lèi)型)full.classname.of.Driver (如果是自定義的NHibernate外部的IDriver實(shí)現(xiàn)類(lèi) )full.classname.of.Driver, assembly。

這個(gè)配置通常是不需要配置的,如果設(shè)置好了hibernate.dialect一般會(huì)自動(dòng)選好對(duì)應(yīng)的IDriver。 詳細(xì)的dialect與IDriver的默認(rèn)對(duì)應(yīng)關(guān)系可以查看API文檔。

connection.connection_string 數(shù)據(jù)庫(kù)連接字符串
connection.connection_string_name 數(shù)據(jù)庫(kù)連接字符串名稱(定義在.Net配置文件<connectionStrings>配置節(jié)里面的連接字符串名。
connection.isolation ADO.NET事務(wù)隔離級(jí)別, 查看System.Data.IsolationLevel類(lèi)來(lái)了解各個(gè)值的具體意義, 但請(qǐng)注意多數(shù)數(shù)據(jù)庫(kù)都不支持所有的隔離級(jí)別.

例如: Chaos, ReadCommitted, ReadUncommitted, RepeatableRead, Serializable, Unspecified

connection.release_mode 指定ADO.NET何時(shí)釋放數(shù)據(jù)庫(kù)連接。查看10.7 連接釋放模式.

例如: auto (默認(rèn)) | on_close | after_transaction

注意,這些設(shè)置僅對(duì)通過(guò)ISessionFactory.OpenSession得到的ISession起作用。對(duì)于通過(guò)ISessionFactory.GetCurrentSession得到的ISession, 所配置的ICurrentSessionContext實(shí)現(xiàn)控制這些ISession的連接釋放模式。 請(qǐng)參閱2.3。上下文相關(guān)的(Contextual) Session獲取更多信息。

command_timeout 指定NHibernate生成的IDbCommands對(duì)象的超時(shí)時(shí)間。 .
adonet.batch_size 指定用ADO.Net的批量更新的數(shù)量,默認(rèn)設(shè)置為0(不啟用該功能)。請(qǐng)參閱16.6. 批量更新.

  下面是一個(gè)如何在web.config里如何設(shè)置數(shù)據(jù)庫(kù)連接屬性的例子:

  NHibernate依賴的ADO.NET自己實(shí)現(xiàn)的數(shù)據(jù)庫(kù)連接池。

  你也可以通過(guò)實(shí)現(xiàn)NHibernate.Connection.IConnectionProvider接口來(lái)自己定義ADO.NET連接獲取策略, 你也可以通過(guò)設(shè)置connection.provider_class來(lái)更換數(shù)據(jù)庫(kù)連接獲取策略。


  有大量屬性能用來(lái)控制NHibernate在運(yùn)行期的行為. 它們都是可選的, 并擁有適當(dāng)?shù)哪J(rèn)值.

  警告: 其中一些屬性是"系統(tǒng)級(jí)(system-level)的",系統(tǒng)級(jí)屬性只能通過(guò)在代碼里設(shè)置NHibernate.Cfg.Environment類(lèi)的靜態(tài)屬性,或者在配置文件里的<hibernate-configuration>配置節(jié)里來(lái)設(shè)置, 而不能用Configuration.SetProperties方法來(lái)設(shè)置。

表 3.2. NHibernate配置屬性

屬性名 用途
dialect 設(shè)置NHibernate的Dialect類(lèi)名 - 允許NHibernate針對(duì)特定的關(guān)系數(shù)據(jù)庫(kù)生成優(yōu)化的SQL

可用值: full.classname.of.Dialect, assembly

default_schema 在生成的SQL中, 將給定的schema/tablespace附加于非全限定名的表名上.

可用值: SCHEMA_NAME

use_outer_join 允許外連接抓取,已棄用,請(qǐng)使用max_fetch_depth。

可用值: true | false

max_fetch_depth 為單向關(guān)聯(lián)(一對(duì)一, 多對(duì)一)的外連接抓?。╫uter join fetch)樹(shù)設(shè)置最大深度. 值為0意味著將關(guān)閉默認(rèn)的外連接抓取

可用值:建議在03之間取值。

use_reflection_optimizer 開(kāi)啟運(yùn)行時(shí)代碼動(dòng)態(tài)生成來(lái)替代運(yùn)行時(shí)反射機(jī)制(系統(tǒng)級(jí)屬性). 使用這種方式的話程序在啟動(dòng)會(huì)耗費(fèi)一定的性能,但是在程序運(yùn)行期性能會(huì)有更好的提升. 注意即使關(guān)閉這個(gè)優(yōu)化, Hibernate還是需要CGLIB. 你不能在hibernate.cfg.xml中設(shè)置此屬性. 這個(gè)屬性不能在hibernate.cfg.xml或者是應(yīng)用程序配置文件<hibernate-configuration> 配置節(jié)中設(shè)置。

可用值: true | false

bytecode.provider 指定字節(jié)碼provider用于優(yōu)化NHibernate反射性能。 null代表完全關(guān)閉性能優(yōu)化, lcg用于輕量級(jí)的代碼動(dòng)態(tài)生成,codedom基于CodeDOM代碼動(dòng)態(tài)生成。

可用值: null | lcg | codedom

cache.provider_class 設(shè)置緩存實(shí)現(xiàn)類(lèi)(實(shí)現(xiàn)ICacheProvider接口的類(lèi))

可用值: classname.of.CacheProvider, assembly

cache.use_minimal_puts 以頻繁的讀操作為代價(jià), 優(yōu)化二級(jí)緩存來(lái)最小化寫(xiě)操作(對(duì)群集緩存有效)。

可用值: true | false

cache.use_query_cache 允許查詢緩存, 個(gè)別查詢?nèi)匀恍枰辉O(shè)置為可緩存的.

可用值: true | false

cache.query_cache_factory 自定義實(shí)現(xiàn)IQueryCacheFactory接口的類(lèi)名, 默認(rèn)為內(nèi)建的StandardQueryCacheFactory

可用值: classname.of.QueryCacheFactory, assembly

cache.region_prefix 二級(jí)緩存區(qū)域名的前綴。

可用值: prefix

query.substitutions 將NHibernate查詢中的符號(hào)映射到SQL查詢中的符號(hào) (符號(hào)可能是函數(shù)名或常量名字).

可用值: hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC

show_sql 輸出所有SQL語(yǔ)句到控制臺(tái).

可用值: true | false

hbm2ddl.auto ISessionFactory創(chuàng)建時(shí),自動(dòng)檢查數(shù)據(jù)庫(kù)結(jié)構(gòu),或者將數(shù)據(jù)庫(kù)schema的DDL導(dǎo)出到數(shù)據(jù)庫(kù). 使用 create-drop時(shí),在顯式關(guān)閉ISessionFactory時(shí),將drop掉數(shù)據(jù)庫(kù)schema.

可用值: create | create-drop

use_proxy_validator 是否啟用驗(yàn)證接口或者是類(lèi)是否可以使用代理,默認(rèn)開(kāi)啟。(檢查實(shí)體類(lèi)的屬性或者是方法是否被設(shè)置為Virtual)

可用值: true | false

transaction.factory_class 自定義ITransactionFactory的實(shí)現(xiàn),默認(rèn)為NHibernate內(nèi)建的AdoNetTransactionFactory

可用值: classname.of.TransactionFactory, assembly

  你應(yīng)當(dāng)總是為你的數(shù)據(jù)庫(kù)將hibernate.dialect屬性設(shè)置成正確的 NHibernate.Dialect.Dialect子類(lèi).

  不過(guò)這并不是要嚴(yán)格執(zhí)行的除非你帶算使用 native或者是sequence主鍵生成策略或者是悲觀鎖定 (例如使用ISession.Lock()或者是IQuery.SetLockMode()), 如果你指定一種方言, NHibernate將為上面列出的一些屬性使用合理的默認(rèn)值, 為你省去了手工指定它們的功夫.

表 3.3. NHibernate SQL 方言 (hibernate.dialect)

關(guān)系型數(shù)據(jù)庫(kù) 方言 備注
DB2 NHibernate.Dialect.DB2Dialect
DB2 for iSeries (OS/400) NHibernate.Dialect.DB2400Dialect
Ingres NHibernate.Dialect.IngresDialect
PostgreSQL NHibernate.Dialect.PostgreSQLDialect
PostgreSQL 8.1 NHibernate.Dialect.PostgreSQL81Dialect 方言在PostgreSQL8.1中現(xiàn)在支持FOR UPDATE NOWAIT了。
PostgreSQL 8.2 NHibernate.Dialect.PostgreSQL82Dialect 方言在PostgreSQL8.2中現(xiàn)在支持在 DROP TABLEDROP SEQUENCE中使用IF EXISTS關(guān)鍵字了。
MySQL 3 or 4 NHibernate.Dialect.MySQLDialect
MySQL 5 NHibernate.Dialect.MySQL5Dialect
Oracle (any version) NHibernate.Dialect.OracleDialect
Oracle 9/10g NHibernate.Dialect.Oracle9Dialect
Sybase Adaptive Server Enterprise NHibernate.Dialect.SybaseDialect
Sybase Adaptive Server Anywhere NHibernate.Dialect.SybaseAnywhereDialect
Microsoft SQL Server 2000 NHibernate.Dialect.MsSql2000Dialect
Microsoft SQL Server 2005 NHibernate.Dialect.MsSql2005Dialect
Microsoft SQL Server 2005 Everywhere Edition NHibernate.Dialect.MsSqlCeDialect
Microsoft SQL Server 7 NHibernate.Dialect.MsSql7Dialect
Firebird NHibernate.Dialect.FirebirdDialect driver_class設(shè)置為 NHibernate.Driver.FirebirdClientDriver啟用Firebird provider for .NET 2.0。
SQLite NHibernate.Dialect.SQLiteDialect driver_class設(shè)置為NHibernate.Driver.SQLite20Driver啟用System.Data.SQLite provider for .NET 2.0。
Ingres 3.0 NHibernate.Dialect.IngresDialect

  其他可用的方言都包含在NHibernate Contrib項(xiàng)目中,(請(qǐng)參閱《I. NHibernateContrib 參考文檔》)?,F(xiàn)在這個(gè)項(xiàng)目里僅僅包含Microsoft Access (Jet)數(shù)據(jù)庫(kù)方言.


  NHibernate使用Apache log4net來(lái)為各種事件記錄日志。

  你可以從http://logging./log4net/下載log4net。 你需要在應(yīng)用程序配置文件添加一個(gè)log4net配置節(jié)用于配置log4net。

  NHibernate的源代碼分發(fā)包里有一個(gè)示例配置文件,位置在src/NHibernate.Test。

  我們強(qiáng)烈建議你熟悉一下NHibernate的日志消息. 在不失可讀性的前提下, 我們做了很多工作, 使NHibernate的日志可能地詳細(xì)。

  這是必要的查錯(cuò)利器。 當(dāng)你遇到問(wèn)題的時(shí)候不要忘了設(shè)置show_sql開(kāi)啟SQL日志。


  NHibernate.Cfg.INamingStrategy接口允許你為數(shù)據(jù)庫(kù)中的對(duì)象和schema 元素指定一個(gè)“命名標(biāo)準(zhǔn)”.

  這個(gè)特性有助于減少冗長(zhǎng)的映射定義文件. (例如:TBL_ 前綴). NHibernate默認(rèn)是最小化實(shí)現(xiàn)。

  在加入映射定義前,你可以調(diào)用 Configuration.SetNamingStrategy()指定一個(gè)不同的命名策略:

  NHibernate.Cfg.ImprovedNamingStrategy是一個(gè)內(nèi)建的命名策略, 對(duì)一些應(yīng)用程序而言,可能是非常有用的起點(diǎn).


  另一個(gè)配置方法是在hibernate.cfg.xml文件中指定一套完整的配置. 這個(gè)文件可以當(dāng)成配置文件中的 <nhibernate;><hibernate-configuration>配置節(jié)的替代。

  XML配置文件默認(rèn)放在應(yīng)用程序的根目錄下。下面是一個(gè)例子:

  使用XML配置,使得啟動(dòng)NHibernate變的異常簡(jiǎn)單, 如下所示,一行代碼就可以搞定:

  你可以使用如下代碼來(lái)添加一個(gè)不同的XML配置文件

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多

    少妇福利视频一区二区| 激情中文字幕在线观看| 精品日韩欧美一区久久| 97人妻人人揉人人躁人人| 欧美韩国日本精品在线| 国产99久久精品果冻传媒| 欧美午夜不卡在线观看| 免费啪视频免费欧美亚洲| 亚洲中文字幕视频一区二区| 国产视频一区二区三区四区| 九九热这里只有免费精品| 99国产精品国产精品九九| 久久精品国产亚洲av麻豆尤物| 亚洲一区二区欧美在线| 欧美丝袜诱惑一区二区| 国产精品一区二区三区欧美| 午夜国产福利在线播放| 黑人巨大精品欧美一区二区区 | 国产精品一区二区成人在线| 亚洲国产精品久久综合网| 亚洲av熟女国产一区二区三区站| 中国美女偷拍福利视频| 日韩高清一区二区三区四区 | 五月天婷亚洲天婷综合网| 亚洲第一区二区三区女厕偷拍| 国产亚洲精品岁国产微拍精品| 国产亚洲欧美自拍中文自拍| 亚洲伦理中文字幕在线观看| 精品国产亚洲一区二区三区| 日韩欧美黄色一级视频| 日韩一区二区三区观看| 五月天六月激情联盟网| 国产又大又黄又粗又免费| 欧美色婷婷综合狠狠爱| 中日韩美女黄色一级片| 欧美黄色黑人一区二区| 色一欲一性一乱—区二区三区| 性感少妇无套内射在线视频| 日韩毛片视频免费观看| 中文字幕亚洲精品乱码加勒比| 国产日韩欧美在线播放|