NHibernate配置

时间:2022-06-13 19:59:31

因为NHibernate被设计为可以在许多不同环境下工作,所以它有很多配置参数。幸运的是,大部分都已经有默认值了。 NHibernate.Test.dll包含了一个示例的配置文件app.config,它演示了一些可变的参数。

下面是一个在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>
属性名 用途
hibernate.connection.provider_class 定制IConnectionProvider的类型.

例如:full.classname.of.ConnectionProvider (如果提供者创建在NHibernate中), 或者 full.classname.of.ConnectionProvider, assembly (如果使用一个自定义的IConnectionProvider接口的实现,它不属于NHibernate)。

hibernate.connection.driver_class 定制IDriver的类型.

full.classname.of.Driver (如果驱动类创建在NHibernate中), 或者 full.classname.of.Driver, assembly (如果使用一个自定义IDriver接口的实现,它不属于NHibernate)。

hibernate.connection.connection_string 用来获得连接的连接字符串.
hibernate.connection.isolation 设置事务隔离级别. 请检查 System.Data.IsolationLevel 来得到取值的具体意义并且查看数据库文档以确保级别是被支持的。

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

可选配置属性

下面是一些在运行时可以改变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

SQL 方言 (SQL Dialects)

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

通过Apache log4net,NHibernate记录很多事件。

你可以从 http://logging.apache.org/log4net/下载 log4net. 要使用log4net,你要在app.config或者web.config中配置log4net节点.在src/NHibernate.Test工程中有一个配置的例子.