整理的一些NHibernate的配置选项
NHibernate ADO.NET 属性
属性名 | 用途 |
---|---|
hibernate.connection.provider_class | 定制IConnectionProvider 的类型. 例如: |
hibernate.connection.driver_class | 定制IDriver 的类型.
|
hibernate.connection.connection_string | 用来获得连接的连接字符串. |
hibernate.connection.isolation | 设置事务隔离级别. 请检查 System.Data.IsolationLevel 来得到取值的具体意义并且查看数据库文档以确保级别是被支持的。 例如: |
下面是一个在web.config
文件中指定连接属性的例子:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="nhibernate" type="System.Configuration.NameValueSectionHandler, System, Version=1.0.5000.0,Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> </configSections> <nhibernate> <add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" /> <add key="hibernate.connection.driver_class" value="NHibernate.Driver.SqlClientDriver" /> <add key="hibernate.connection.connection_string" value="Server=127.0.0.1;Initial Catalog=thedatabase;Integrated Security=SSPI" /> <add key="hibernate.connection.isolation" value="ReadCommitted" /> <add key="hibernate.dialect" value="NHibernate.Dialect.MsSql2000Dialect" /> </nhibernate> <!-- log4net (required by NHibernate) and other app specific config follows --> </configuration>
下面是一些在运行时可以改变NHibernate行为的其他配置。所有这些都是可选的,也有合理的默认值。
表2.2 NHibernate 配置属性
属性名 用途 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会为上面列出的一些属性使用特殊默认值,省得你手工指定它们。表2.3 NHibernate SQL 方言 (
hibernate.dialect
)
RDBMS 方言 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
如果你的数据库支持ANSI或者Oracle风格的外连接,外连接抓取可能提高性能,因为可以限制和数据库交互的数量(代价是数据库自身进行了更多的工作)。外连接抓取允许你在一个SELECT
语句中就可以得到一个由多对一或者一对一连接构成的对象图。
默认情况下,抓取在叶对象,拥有代理的对象或者产生对自身的引用时终止。
对一个特定关联来说,通过在XML映射文件中设置outer-join
属性可以控制是否开启抓取功能。
设置hibernate.use_outer_join
为false
将禁用全局的外连接抓取.设置为true
将启用所有一对一(one-to-one)和多对一(many-to-one)关联中的外连接抓取,默认情况下,它被设置为auto,即自动外连接。但是,一对多关联和集合永远不会使用外连接抓取,除非对每个特定的关联进行明确声明。这一行为可以在运行时通过NHibernate 查询重载。
通过实现NHibernate.Cache.ICacheProvider
接口,你可以整合一个第二级缓存进来。你可以通过hibernate.cache.provider_class
选择某个自定义的实现。