打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
NHibernate 2.0 参考文档 - 03 配置

3. 配置

  由于NHibernate是为了能在各种不同环境下工作而设计的, 因此存在着大量的配置参数.

  幸运的是多数配置参数都 有比较直观的默认值, 并有随Hibernate一同分发的配置样例 App.config(位于src\NHibernate.Test)来展示各种配置选项.

  所需做的仅仅是将这个样例文件复制到自己的项目路径下并做一些自定义的修改.


  一个NHibernate.Cfg.Configuration实例代表了一个应用程序中.NET类型 到SQL数据库映射的完整集合.

  Configuration被用来构建一个(不可变的 (immutable)) ISessionFactory. 映射定义则由不同的XML映射定义文件编译而来。

  你可以直接实例化Configuration来获取一个实例, 下面是一个例子如何加载两个xml映射文件。

  另一个方法(有时候可能会更好),让NHibernate从嵌入式资源里面加载映射文件:

  NHibernate将会在当前应用程序集中中寻找名字为NHibernate.Auction.Item.hbm.xmlNHibernate.Auction.Bid.hbm.xml嵌入式资源文件. 这种方式消除了任何对文件名的硬编码(hardcoded).

  还有一种方法(应该是最好的),让NHibernate自动到程序集加载所有的嵌入式资源xml映射文件。

  NHibernate会自动到应用程序集里查找所有的以.hbm.xml结尾的资源文件。这种方式消除了任何对文件名的硬编码(hardcoded), 并且确保了应用程序集里的所有的xml映射文件都被加载。

  如果使用Visual Studio .NET 和 NAnt 来编译应用程序集的话,请确保.hbm.xml文件被作为嵌入式资源编译进应用程序集。

Configuration也允许你指定配置属性:

  Configuration实例被设计成启动期间(configuration-time)对象, 一旦ISessionFactory创建完成它就被丢弃了。


  当所有映射定义被Configuration解析后, 应用程序必须获得一个用于构造ISession实例的工厂。 这个工厂将被应用程序的所有线程共享:

  NHibernate允许你的应用程序创建多个ISessionFactory实例。这对使用多个数据库的应用来说很有用。


  ISessionFactory可以通过用户自己创建的ADO.NET连接创建一个ISession, 这样的设计可以让你让你们的程序更方便的获取数据库连接:

  注意不要用同一个ADO.NET打开两个不同的ISession


  另一种方法就是,你可以让ISessionFactory替你打开连接。ISessionFactory必须事先知道ADO.NET连接的参数,有几种不同的方法设置参数:

  如果你使用这种方法,打开一个ISession是非常简单的:

  所有的NHibernate属性名和约束都在 NHibernate.Cfg.Environment类中定义。我们讨论一下ADO.NET连接配置最重要的几项设置:

  假若你设置了如下的属性,NHibernate会使用ADO.NET Data Provider来得到连接:

表 3.1. NHibernate ADO.NET 属性

属性名用途
connection.provider_class实现IConnectionProvider接口的类型。

例如: (如果是NHibernate内部的IConnectionProvider实现类)full.classname.of.ConnectionProvider,(如果是自定义的NHibernate外部的IConnectionProvider实现类 )full.classname.of.ConnectionProvider, assembly

connection.driver_class如果使用DriverConnectionProvider,实现IDriver接口的类型。

(如果是NHibernate内部的实现的IDriver类型)full.classname.of.Driver (如果是自定义的NHibernate外部的IDriver实现类 )full.classname.of.Driver, assembly

这个配置通常是不需要配置的,如果设置好了hibernate.dialect一般会自动选好对应的IDriver。 详细的dialect与IDriver的默认对应关系可以查看API文档。

connection.connection_string数据库连接字符串
connection.connection_string_name数据库连接字符串名称(定义在.Net配置文件<connectionStrings>配置节里面的连接字符串名。
connection.isolationADO.NET事务隔离级别, 查看System.Data.IsolationLevel类来了解各个值的具体意义, 但请注意多数数据库都不支持所有的隔离级别.

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

connection.release_mode指定ADO.NET何时释放数据库连接。查看10.7 连接释放模式.

例如: auto (默认) | on_close | after_transaction

注意,这些设置仅对通过ISessionFactory.OpenSession得到的ISession起作用。对于通过ISessionFactory.GetCurrentSession得到的ISession, 所配置的ICurrentSessionContext实现控制这些ISession的连接释放模式。 请参阅2.3。上下文相关的(Contextual) Session获取更多信息。

command_timeout指定NHibernate生成的IDbCommands对象的超时时间。 .
adonet.batch_size指定用ADO.Net的批量更新的数量,默认设置为0(不启用该功能)。请参阅16.6. 批量更新.

  下面是一个如何在web.config里如何设置数据库连接属性的例子:

  NHibernate依赖的ADO.NET自己实现的数据库连接池。

  你也可以通过实现NHibernate.Connection.IConnectionProvider接口来自己定义ADO.NET连接获取策略, 你也可以通过设置connection.provider_class来更换数据库连接获取策略。


  有大量属性能用来控制NHibernate在运行期的行为. 它们都是可选的, 并拥有适当的默认值.

  警告: 其中一些属性是"系统级(system-level)的",系统级属性只能通过在代码里设置NHibernate.Cfg.Environment类的静态属性,或者在配置文件里的<hibernate-configuration>配置节里来设置, 而不能用Configuration.SetProperties方法来设置。

表 3.2. NHibernate配置属性

属性名用途
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为单向关联(一对一, 多对一)的外连接抓取(outer join fetch)树设置最大深度. 值为0意味着将关闭默认的外连接抓取

可用值:建议在03之间取值。

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

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

可用值: true | false

hbm2ddl.autoISessionFactory创建时,自动检查数据库结构,或者将数据库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

  你应当总是为你的数据库将hibernate.dialect属性设置成正确的 NHibernate.Dialect.Dialect子类.

  不过这并不是要严格执行的除非你带算使用 native或者是sequence主键生成策略或者是悲观锁定 (例如使用ISession.Lock()或者是IQuery.SetLockMode()), 如果你指定一种方言, NHibernate将为上面列出的一些属性使用合理的默认值, 为你省去了手工指定它们的功夫.

  其他可用的方言都包含在NHibernate Contrib项目中,(请参阅《I. NHibernateContrib 参考文档》)。现在这个项目里仅仅包含Microsoft Access (Jet)数据库方言.


  NHibernate使用Apache log4net来为各种事件记录日志。

  你可以从http://logging.apache.org/log4net/下载log4net。 你需要在应用程序配置文件添加一个log4net配置节用于配置log4net

  NHibernate的源代码分发包里有一个示例配置文件,位置在src/NHibernate.Test

  我们强烈建议你熟悉一下NHibernate的日志消息. 在不失可读性的前提下, 我们做了很多工作, 使NHibernate的日志可能地详细。

  这是必要的查错利器。 当你遇到问题的时候不要忘了设置show_sql开启SQL日志。


  NHibernate.Cfg.INamingStrategy接口允许你为数据库中的对象和schema 元素指定一个“命名标准”.

  你可能会提供一些通过.NET标识生成数据库标识或将映射定义文件中"逻辑"表/列名处理成"物理"表/列名的规则.

  这个特性有助于减少冗长的映射定义文件. (例如:TBL_ 前缀). NHibernate默认是最小化实现。

  在加入映射定义前,你可以调用 Configuration.SetNamingStrategy()指定一个不同的命名策略:

  NHibernate.Cfg.ImprovedNamingStrategy是一个内建的命名策略, 对一些应用程序而言,可能是非常有用的起点.


  另一个配置方法是在hibernate.cfg.xml文件中指定一套完整的配置. 这个文件可以当成配置文件中的 <nhibernate;><hibernate-configuration>配置节的替代。

  XML配置文件默认放在应用程序的根目录下。下面是一个例子:

  使用XML配置,使得启动NHibernate变的异常简单, 如下所示,一行代码就可以搞定:

  你可以使用如下代码来添加一个不同的XML配置文件

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
[NHibernate]基本配置与测试
CSDN 文档中心:Hibernate访问多个数据库
ANT+Xdoclet自动生成Hibernate配置文件\映射文件(正确)
Hibernate的配置文件
hibernate问题集锦
Hibernate工作原理
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服