在上一個教程中,我們講了Nhibernate的基本使用!So,讓我們回顧下Nhibernate使用基本的步驟吧
1.NHibernate配置 ----- 這一步我們告訴了Nhibernate:數據庫連接字符串,實體類所在的程序集,映射文件所在的程序集………
2.創建實體類 ----- 定義了數據實體 (O/RM中的O,Object)
3.創建映射文件 ----- 定義了 實體和表 之間的映射關系 (O/RM中的M,Mapping)
4.創建數據庫和表 ----- 創建 數據庫和表 (O/RM中的R,RelationDatabase)
………………
OK,在這一節里面,我將會詳細講解第一步:NHibernate配置
一:Nhibernate配置方式
NHibernate配置的方式有N種
第一:通過hibernate.cfg.xml配置文件,也就是上一個教程中所采用的配置方式,通過應用程序目錄的hibernate.cfg.xml文件
配置:
NHibernate.Cfg.Configuration config= new NHibernate.Cfg.Configuration().Configure();
第二:通過Web.config/App.config
配置節處理程序:NHibernate.Cfg.ConfigurationSectionHandler,Nhibernate
Web.config/App.config文件:
<?xml version="1.0" encoding="utf-8" ?><configuration> <configSections> <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler,Nhibernate"/> </configSections> <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> <session-factory name="XShopFactory"> <PRoperty name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> <property name="connection.connection_string"> Server=.;initial catalog=XShopDb;Integrated Security=SSPI </property> <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> <property name="show_sql">true</property> <mapping assembly="Mapping"/> </session-factory> </hibernate-configuration> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup></configuration>配置:同樣方式
NHibernate.Cfg.Configuration config= new NHibernate.Cfg.Configuration().Configure();
第三:通過代碼實現
//通過代碼實現IDictionary<string, string> props = new Dictionary<string, string>();props.Add("connection.provider", "NHibernate.Connection.DriverConnectionProvider");props.Add("connection.connection_string", "Server=.;initial catalog=XShopDb;Integrated Security=SSPI"); props.Add("dialect", "NHibernate.Dialect.MsSql2008Dialect"); var config = new Configuration().AddProperties(props).AddAssembly("Mapping").Configure();
附:property可選屬性
屬性名 | 用途 |
dialect | 設置NHibernate的Dialect類名 - 允許NHibernate針對特定的關系數據庫生成優化的SQL , 可用值:見下表 full.classname.of.Dialect, assembly |
default_schema | 在生成的SQL中, 將給定的schema/tablespace附加于非全限定名的表名上。 可用值: SCHEMA_NAME |
use_outer_join | 允許外連接抓取,已棄用,請使用max_fetch_depth。 可用值: true | false |
max_fetch_depth | 為單向關聯(一對一, 多對一)的外連接抓?。?/span>outer join fetch)樹設置最大深度。 值為0意味著將關閉默認的外連接抓取 可用值:建議在0 到3之間取值。 |
use_reflection_optimizer | 開啟運行時代碼動態生成來替代運行時反射機制(系統級屬性)。 使用這種方式的話程序在啟動會耗費一定的性能,但是在程序運行期性能會有更好的提升。 注意即使關閉這個優化, Hibernate還是需要CGLIB. 你不能在hibernate.cfg.xml中設置此屬性。 這個屬性不能在hibernate.cfg.xml或者是應用程序配置文件<hibernate-configuration> 配置節中設置。 可用值: true | false |
bytecode.provider | 指定字節碼provider用于優化NHibernate反射性能。 null代表完全關閉性能優化, lcg用于輕量級的代碼動態生成,codedom基于CodeDOM代碼動態生成。 可用值: null | lcg | codedom |
cache.provider_class | 設置緩存實現類(實現ICacheProvider接口的類) 可用值: classname.of.CacheProvider, assembly |
cache.use_minimal_puts | 以頻繁的讀操作為代價, 優化二級緩存來最小化寫操作(對群集緩存有效)。 可用值: true | false |
cache.use_query_cache | 允許查詢緩存, 個別查詢仍然需要被設置為可緩存的. 可用值: true | false |
cache.query_cache_factory | 自定義實現IQueryCacheFactory接口的類名, 默認為內建的StandardQueryCacheFactory。 可用值: classname.of.QueryCacheFactory, assembly |
cache.region_prefix | 二級緩存區域名的前綴。 可用值: prefix |
query.substitutions | 將NHibernate查詢中的符號映射到SQL查詢中的符號 (符號可能是函數名或常量名字)。 可用值: hqlLiteral=SQL_LITERAL, hqlFunction=SQLFUNC query.substitutions true=1, false=0 將導致符號true和false在生成的SQL中被翻譯成整數常量 |
show_sql | 輸出所有SQL語句到控制臺. 可用值: true | false |
hbm2ddl.auto | 在ISessionFactory創建時,自動檢查數據庫結構,或者將數據庫schema的DDL導出到數據庫。 使用 create-drop時,在顯式關閉ISessionFactory時,將drop掉數據庫schema。 可用值: create | create-drop |
use_proxy_validator | 是否啟用驗證接口或者是類是否可以使用代理,默認開啟。 (檢查實體類的屬性或者是方法是否被設置為Virtual) 可用值: true | false |
transaction.factory_class | 自定義ITransactionFactory的實現,默認為NHibernate內建的AdoNetTransactionFactory。 可用值: classname.of.TransactionFactory, assembly |
附:數據庫方言:dialect
關系型數據庫 方言 備注 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中現在支持FOR UPDATE NOWAIT了。 PostgreSQL 8.2 NHibernate.Dialect.PostgreSQL82Dialect 方言在PostgreSQL8.2中現在支持在 DROP TABLE和DROP SEQUENCE中使用IF EXISTS關鍵字了。 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設置為 NHibernate.Driver.FirebirdClientDriver啟用Firebird provider for .NET 2.0。 SQLite NHibernate.Dialect.SQLiteDialect 把driver_class設置為NHibernate.Driver.SQLite20Driver啟用System.Data.SQLite provider for .NET 2.0。 Ingres 3.0 NHibernate.Dialect.IngresDialect
--今天就暫時寫這么一點,下次繼續更新
表格來自 http://www.49028c.com/kiler/ @kiler前輩的NHibernate中文文檔
原創文章,轉載請注明出處:http://www.49028c.com/zhxj/
2015.08.23 --張小軍
新聞熱點
疑難解答