当前位置: 代码迷 >> .NET相关 >> 老妪能解的Nhibernate教程(2) - 配置之Nhibernate配置
  详细解决方案

老妪能解的Nhibernate教程(2) - 配置之Nhibernate配置

热度:204   发布时间:2016-04-24 02:46:10.0
通俗易懂的Nhibernate教程(2) ---- 配置之Nhibernate配置

在上一个教程中,我们讲了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

设置NHibernateDialect类名 - 允许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

为单向关联(一对一, 多对一)的外连接抓取(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 将导致符号truefalse在生成的SQL中被翻译成整数常量

show_sql

输出所有SQL语句到控制台.

可用值: true | false

hbm2ddl.auto

ISessionFactory创建时,自动检查数据库结构,或者将数据库schemaDDL导出到数据库。

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

 

关系型数据库方言备注
DB2NHibernate.Dialect.DB2Dialect 
DB2 for iSeries (OS/400)NHibernate.Dialect.DB2400Dialect 
IngresNHibernate.Dialect.IngresDialect 
PostgreSQLNHibernate.Dialect.PostgreSQLDialect 
PostgreSQL 8.1NHibernate.Dialect.PostgreSQL81Dialect方言在PostgreSQL8.1中现在支持FOR UPDATE NOWAIT了。
PostgreSQL 8.2NHibernate.Dialect.PostgreSQL82Dialect方言在PostgreSQL8.2中现在支持在 DROP TABLEDROP SEQUENCE中使用IF EXISTS关键字了。
MySQL 3 or 4NHibernate.Dialect.MySQLDialect 
MySQL 5NHibernate.Dialect.MySQL5Dialect 
Oracle (any version)NHibernate.Dialect.OracleDialect 
Oracle 9/10gNHibernate.Dialect.Oracle9Dialect 
Sybase Adaptive Server EnterpriseNHibernate.Dialect.SybaseDialect 
Sybase Adaptive Server AnywhereNHibernate.Dialect.SybaseAnywhereDialect 
Microsoft SQL Server 2000NHibernate.Dialect.MsSql2000Dialect 
Microsoft SQL Server 2005NHibernate.Dialect.MsSql2005Dialect 
Microsoft SQL Server 2005 Everywhere EditionNHibernate.Dialect.MsSqlCeDialect 
Microsoft SQL Server 7NHibernate.Dialect.MsSql7Dialect 
FirebirdNHibernate.Dialect.FirebirdDialectdriver_class设置为 NHibernate.Driver.FirebirdClientDriver启用Firebird provider for .NET 2.0。
SQLiteNHibernate.Dialect.SQLiteDialectdriver_class设置为NHibernate.Driver.SQLite20Driver启用System.Data.SQLite provider for .NET 2.0。
Ingres 3.0NHibernate.Dialect.IngresDialect 

 

--今天就暂时写这么一点,下次继续更新

 

表格来自 http://www.cnblogs.com/kiler/  @kiler前辈的NHibernate中文文档

 

原创文章,转载请注明出处:http://www.cnblogs.com/zhxj/

2015.08.23 --张小军

  相关解决方案