您的位置:首页 > 数据库

NHibernate学习手记(3) - NH的配置信息

2007-03-19 12:11 323 查看
作为一种通用的持久层框架,NH可以通过配置来指定所使用的数据库类型,并且可根据不同的数据库调整NH的运行参数。这些配置信息通常保存在配置文件中,当数据库配置发生改变时,我们只需要修改配置文件即可,不需要修改代码和编译。
主要内容:
1、NH支持的配置参数
2、设置NH配置参数的若干方法
 
一、NH支持的配置参数
NH初始化NHibernate.Cfg.Configuration对象时需要一系列的配置参数,最基本如数据库类型、访问方言和数据库连接字符串等。下表列出了常用的配置参数:

 

[align=center]Attributes[/align]
[align=center]Usage[/align]
[align=center]Example (in default style)[/align]
hibernate.connection.provider_class
指定NH所使用的Nhibernate.Connection.IConnectionProvider类型。Required
[align=left]<nhibernate>[/align]
[align=left]<addkey="hibernate.connection.provider"      value="NHibernate.Connection.DriverConnectionProvider"/>[/align]
</nhibernate>
hibernate.connection.isolation
指定数据库事务级别,同System.Data.IsolationLevel设定。Required
[align=left]<nhibernate>[/align]
[align=left]<addkey="hibernate.connection.isolation"      value="ReadCommitted"/>[/align]
</nhibernate>
hibernate.connection.connection_string
指定数据库连接字符串。Required
[align=left]<nhibernate>[/align]
[align=left]<add[/align]
[align=left]key="hibernate.connection.connection_string"      value="Server=localhost;uid=sa;password=sa;database=NHTrial"[/align]
/>
[align=left]</nhibernate>[/align]
hibernate.connection.driver_class
指定NH使用的NHibernate.Driver.IDriver类型。Required
[align=left]<nhibernate>[/align]
[align=left]<add[/align]
[align=left]key="hibernate.connection.driver_class"[/align]
[align=left]value="NHibernate.Driver.SqlClientDriver"[/align]
/>
</nhibernate>
hibernate.connection.pool_size
指定NH的数据库连接池大小
[align=left]<add key="hibernate.connection.pool_size"[/align]
[align=left]value="2"[/align]
/>
hibernate.dialect
指定NH所使用的数据库方言NHibernate.Dialect.Dialect类型
[align=left]<add key="hibernate.dialect"[/align]
[align=left]value="NHibernate.Dialect.MsSql2000Dialect"[/align]
/>
hibernate.use_outer_join
指定是否允许用户在HQL中使用outer-join方式的查询
[align=left]<add key="hibernate.user_outer_join"[/align]
[align=left]value="true|false"[/align]
/>
hibernate.query.substitutions
指定HQL转换为SQL需要进行的特殊字符串(Token)替换,多个字符串之间用,隔开
[align=left]<add key="hibernate.query.substitions"[/align]
[align=left]value="hqlToken1=sqlToken1,hqlToken2=sqlToken2"[/align]
/>
hibernate.cache.provider_class
指定提供缓存服务的ICacheProvider。
[align=left]<add key="hibernate.cache.provider_class"[/align]
[align=left]value="NHibernate.Cache.HashtableCacheProvider"[/align]
/>
hibernate.cache.use_query_cache
指定查询结果是否缓存?
[align=left]<add key="hibernate.cache.use_query_cache"[/align]
[align=left]value="true|false"[/align]
/>
hibernate.default_schema
指定默认的数据库schema
[align=left]<add key="hibernate.default_schema"[/align]
[align=left]value="northwind.dbo"[/align]
/>
hibernate.prepare_sql
指定是否使用prepare的方式处理sql语句
[align=left]<add key="hibernate.prepare_sql"[/align]
[align=left]value="true|false"[/align]
/>
hibernate.session_factory_name
指定默认的ISessionFactory对象的名称(Name属性)
[align=left]<add key="hibernate.session_factory_name"[/align]
[align=left]value="foo_factory"[/align]
/>
对上表的说明:
1)对于所指定类型的数据库,IConnectionProvider负责提供相应的IDbConnection;IDriver提供了相应的数据库访问策略(strategy)。
2)Optional的属性都有各自的默认值,请直接查阅NHibernate Online Document。
 
二、设置NH配置参数的若干方式
NHibernate支持多种设置Configuration配置参数的方式,可以把配置参数写在web.config/app.config文件,也可以在创建Configuration对象时,把配置信息赋值给Configuration对象。
1、在web.config/app.config的NameValueSectionHandler类型的nhibernate自定义配置节中设置配置参数,NH将在创建Configuration对象时自动设置。
<xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section
      name="nhibernate" 
      type="System.Configuration.NameValueSectionHandler" 
    />
  configSections>

  <nhibernate>
    <add 
      key="hibernate.connection.provider"
      value="NHibernate.Connection.DriverConnectionProvider"
    />
    <add
      key="hibernate.dialect"
      value="NHibernate.Dialect.MsSql2000Dialect"
    />
    <add
      key="hibernate.connection.driver_class"
      value="NHibernate.Driver.SqlClientDriver"
    />
    <add
      key="hibernate.connection.connection_string"
      value="Server=localhost;uid=sa;password=sa;database=NHTrial"
    />
  </nhibernate>
<configuration>

然后,我们在程序中只需简单的初始化Configuration对象即可。
Configuration cfg = new Configuration();
2、使用nhibernate配置文件。


把NH提供的nhibernate-configuration-2.0.xsd拷贝到%VS2003安装目录%/Common7/Packages/schemas/xml目录中,可在编写nhibernate配置文件时得到intellisense支持。
下面的nhibernate配置信息和我们刚才在web.config中的设置等价
<xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration  xmlns="urn:nhibernate-configuration-2.0" >
    <session-factory name="NHConsole">
        <property name="connection.provider">NHibernate.Connection.DriverConnectionProviderproperty>
        <property name="connection.driver_class">NHibernate.Driver.SqlClientDriverproperty>
        <property name="connection.connection_string">Server=localhost;uid=sa;password=sa;database=NHTrialproperty>
        <property name="dialect">NHibernate.Dialect.MsSql2000Dialectproperty>
    session-factory>
    
</hibernate-configuration>
不过,我们要采取另一种方法来创建Configuration对象,语句中的fileName为nhibernate配置文件路径:


Configuration cfg = new Configuration().Configure(fileName);
等等,你说NH会不会有默认的nhibernate配置文件?当我们调用


Configuration cfg = new Configuration().Configure();
时,NH将自动查找web.config/app.config文件所在目录下是否存在名为hibernate.cfg.xml的配置文件,并以此文件中的配置信息来初始化Configuration对象。


注意:nhibernate配置文件的设置将覆盖web.config/app.config文件中的配置。且nhibernate配置文件还有更多的用途,这个会在后续文章中介绍。
3、在代码中设置配置参数。
最后,我们也可以在程序代码中通过给Configuration对象的配置属性赋值,如:


Configuration cfg = new Configuration();


cfg.Properties[NHibernate.Cfg.Environment.Dialect] = "NHibernate.Dialect.MsSql2000Dialect";


Programm._factory = cfg.BuildSessionFactory();
当然,我们一般不会像上面那段代码一样hardcode配置信息,但通过赋值的方式,我们可以自定义的方式去组织和读取配置信息(不同的团队往往有不同的配置信息组织的方式)。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息