由于NHibernate是为了能在各种不同环境下工作而设计的, 因此存在着大量的配置参数.
幸运的是多数配置参数都 有比较直观的默认值, 并有随Hibernate一同分发的配置样例 App.config(位于src\NHibernate.Test)来展示各种配置选项.
所需做的仅仅是将这个样例文件复制到自己的项目路径下并做一些自定义的修改.
一个NHibernate.Cfg.Configuration实例代表了一个应用程序中.NET类型 到SQL数据库映射的完整集合.
Configuration被用来构建一个(不可变的 (immutable)) ISessionFactory. 映射定义则由不同的XML映射定义文件编译而来。
你可以直接实例化Configuration来获取一个实例, 下面是一个例子如何加载两个xml映射文件。
另一个方法(有时候可能会更好),让NHibernate从嵌入式资源里面加载映射文件:
还有一种方法(应该是最好的),让NHibernate自动到程序集加载所有的嵌入式资源xml映射文件。
NHibernate会自动到应用程序集里查找所有的以.hbm.xml结尾的资源文件。这种方式消除了任何对文件名的硬编码(hardcoded), 并且确保了应用程序集里的所有的xml映射文件都被加载。
如果使用Visual Studio .NET 和 NAnt 来编译应用程序集的话,请确保.hbm.xml文件被作为嵌入式资源编译进应用程序集。
Configuration实例被设计成启动期间(configuration-time)对象, 一旦ISessionFactory创建完成它就被丢弃了。
当所有映射定义被Configuration解析后, 应用程序必须获得一个用于构造ISession实例的工厂。 这个工厂将被应用程序的所有线程共享:
NHibernate允许你的应用程序创建多个ISessionFactory实例。这对使用多个数据库的应用来说很有用。
ISessionFactory可以通过用户自己创建的ADO.NET连接创建一个ISession, 这样的设计可以让你让你们的程序更方便的获取数据库连接:
注意不要用同一个ADO.NET打开两个不同的ISession!
另一种方法就是,你可以让ISessionFactory替你打开连接。ISessionFactory必须事先知道ADO.NET连接的参数,有几种不同的方法设置参数:
所有的NHibernate属性名和约束都在 NHibernate.Cfg.Environment类中定义。我们讨论一下ADO.NET连接配置最重要的几项设置:
假若你设置了如下的属性,NHibernate会使用ADO.NET Data Provider来得到连接:
下面是一个如何在web.config里如何设置数据库连接属性的例子:
NHibernate依赖的ADO.NET自己实现的数据库连接池。
有大量属性能用来控制NHibernate在运行期的行为. 它们都是可选的, 并拥有适当的默认值.
你应当总是为你的数据库将hibernate.dialect属性设置成正确的 NHibernate.Dialect.Dialect子类.
表 3.3. NHibernate SQL 方言 (hibernate.dialect)
默认情况下,抓取在叶子对象,集合类,拥有代理的对象或者产生对自身的循环引用时终止。
对于部分关联(particular association),可以通过设置 fetch来配置(默认行为会被覆盖)。
具体信息请参阅《16.1. 抓取策略(Fetching strategies) 》
在NHibernate 1.0里,outer-join具备同样的功效,这个标签现在已经过期了,取而代之的是 fetch标签。
你可以通过实现NHibernate.Cache.ICacheProvider接口来集成一个使用进程或群集范围内的二级缓存系统。
你可以通过设置cache.provider_class来选择缓存的实现。 请参阅《16.2. 二级缓存(The Second Level Cache)》。
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是一个内建的命名策略, 对一些应用程序而言,可能是非常有用的起点.
联系客服