NHibernate Configuring
NHibernate引用程序中有几个关键组件,如下图所示:

初始化时,NHibernate应用程序将生成一个配置对象。本节中,我们通过设置App.config文件来生成该配置对象。该对象负责加载映射信息、反射模型的其他信息 、生成映射的元数据并最终生成一个会话工厂。生成一个会话工厂的开销是昂贵的,因此在一个应用程序的生命周期中只构建一次。该会话工厂负责生成会话。和生成会话工厂不同,生成一个会话的开销是很小的。
在应用程序中,一个会话代表一个工作单元。马丁·福勒将一个工作单元定义为一个对象(该对象包含业务与coordinates相关的对象的列表)和the writing out of changes 和并发性问题的解决方案。NHibernate会话会跟踪实体的变化,并根据这些变化统一更新数据库。在NHibernate中,这种先等待后统一更新数据库的处理方法被称为延迟事务处理。另外,该会话是大部分NHibernate API的入口。
工作单元模式的更多信息请参看http://martinfowler.com/eaaCatalog/unitOfWork.html和马丁·福勒的著作《Patterns of Enterprise Application Architecture》.
该会话充当了应用程序和几个关键NHibernate组件的媒介。也就是说应用程序将不会直接与这些组件交互,但是理解这些组件将是理解NHibernate的关键。 dialect用来生成符合特定的RDBMS的语法的SQL语句。例如,在Microsoft SQL Server中, SELECT TOP 20这个语句会生成结果集中的前20条记录,也就是只有20条记录返回。但是在SQLite中,还要在该语句的末尾加上LIMIT 20. 每一个dialect都为所选定的RDBMS提供必要的SQL语法转换和其他信息以确保可以生成正确的SQL语句. driver负责生成batcher、创建IDbConnection和IDbCommand对象,以及准备这些指令.
connection provider只负责打开关闭数据库连接. batcher负责管理发送给数据库/数据读取器结果集的批处理。目前只有和SqlClientDriver和OracleDataDriver支持该功能 。不支持该功能的drivers使用NonBatchingBatcher管理 IDbCommands和IDataReaders,她可以模拟实现单一的批处理(逻辑上的)功能.
NHibernate 属性列表
下表是几个常用的NHibernate属性.
| 属性名 | 描述 |
| connection.provider | 打开关闭数据库连接 |
| connection.driver_class | 由所使用的RDBMS确定,通常由dialect自动设置。 |
| connection.connection_string |
数据库连接字符串
|
| connection.connection_string_name |
数据库连接字符串名称(定义在.Net配置文件<connectionStrings>配置节里面的连接字符串名。
|
| connection.isolation |
ADO.NET事务隔离级别
|
| dialect | 必须配置。生成特定于RDBMS的SQL. NHibernate.Dialect 命名空间下有许多可选的dialect |
| show_sql | Boolean值.设置为true时输入所有SQL语句到控制台或者使用log4net将SQL语句输出倒其他位置 |
| current_session_context_class | 管理上下文相关的会话的一个类,将在第三章进一步阐述 |
| query.substitutions | 将执行的查询字符串替换为用逗号分割的列表,例如True=1, Yes=1, False=0, No=0. |
| sql_exception_converter | 将特定数据库的ADO.NET异常转化为自定义的异常 |
| prepare_sql | Boolean值. 准备SQL语句和缓存持续数据库连接的执行计划。 |
| command_timeout | Nhibernate等待完成一个SQL命令的超时时间:单位:秒。 |
| adonet.batch_size | 指定用ADO.Net的批量更新的数量,默认设置为0(不启用该功能)。 |
| generate_statistics | 启用对统计信息的跟踪,例如多少个查询被执行,多少个实体被加载。 |
| proxyfactory.factory_class | 必须配置.为所选的代理框架指定一个工厂类,本节使用:Castle DynamicProxy2. |
| format_sql | 添加行结束标记以增强SQL语句的可读性 |
关于这些设置的详细信息请参考:http://www.nhforge.org/doc/nh/en/index.html .
Dialects and drivers
大多数情况下,dialects设置完以后可以为部分的NHibernate属性提供默认值,比如connection.driver_class。NHibernate的NHibernate.Dialect namespace和NHibernate.Driver namespace中的dialects和drivers见下表:
| RDBMS | Dialect(s) | Driver(s) |
| Microsoft SQL Server | MsSql2008Dialect | SqlClientDriver |
| MsSql2005Dialect | SqlServerCEDriver | |
| MsSql2000Dialect | ||
| MsSql7Dialect | ||
| MsSqlCEDialect | ||
| Oracle | Oracle10gDialect | OracleClientDriver |
| Oracle9iDialect | OracleDataClientDriver | |
| Oracle8iDialect | OracleLiteDataDriver | |
| OracleLiteDialect | ||
| MySql | MySQLDialect | MySqlDataDriver |
| MySQL5Dialect | ||
| PostgreSQL | PostGreSQLDialect | NpgsqlDriver |
| PostGreSQL81Dialect | ||
| PostGreSQL82Dialect | ||
| DB2 | DB2Dialect | DB2Driver |
| Db2400Dialect | DB2400Driver | |
| Informix | InformixDialect | IfxDriver |
| InformixDialect0940 | ||
| InformixDialect1000 | ||
| Sybase | SybaseDialect | SybaseClientDriver |
| SybaseASA10Dialect | ASAClientDriver | |
| SybaseASA9Dialect | ASA10ClientDriver | |
| Sybase11Dialect | SybaseAdoNet12ClientDriver | |
| SybaseAdoNet12Dialect | ||
| SybaseAnywhereDialect | ||
| Firebird | FirebirdDialect | FirebirdDriver |
| FirebirdClientDriver | ||
| SQLite | SQLiteDialect | SQLiteDriver |
| SQLite20Driver | ||
| Ingres | IngresDialect | IngresDriver |
NHibernate Configuring的更多相关文章
- NHibernate的调试技巧和Log4Net配置
1.查看nhibernate写在控制台里的sql语句 在配置文件中有这么个选项,假如把它设置为true,nhibernate会把执行的sql显示在控制台上. <property name=&qu ...
- Nhibernate的Session管理
参考:http://www.cnblogs.com/renrenqq/archive/2006/08/04/467688.html 但这个方法还不能解决Session缓存问题,由于创建Session需 ...
- "NHibernate.Exceptions.GenericADOException: could not load an entity" 解决方案
今天,测试一个项目的时候,抛出了这个莫名其妙的异常,然后就开始了一天的调试之旅... 花了很长时间,没有从代码找出任何问题... 那么到底哪里出问题呢? 根据下面那段长长的错误日志: -- ::, ...
- nhibernate连接11g数据库
我框架的数据映射用 nhibernate连接多数据库,这次又增加了oracle11g,负责开发的同事始终连接不上,悲催的sharepoint调试是在不方便... 下面描述下问题的解决,细节问题有3个: ...
- 全自动迁移数据库的实现 (Fluent NHibernate, Entity Framework Core)
在开发涉及到数据库的程序时,常会遇到一开始设计的结构不能满足需求需要再添加新字段或新表的情况,这时就需要进行数据库迁移. 实现数据库迁移有很多种办法,从手动管理各个版本的ddl脚本,到实现自己的mig ...
- 跟我学习NHibernate (1)
引言:Nibernate概述 NHibernate是一个ORM框架,NHibernate是一个把C#对象世界和关系世界数据库之间联系起来的一座桥梁.NHibernate 能自动映射实体模型到数据库,所 ...
- 让OData和NHibernate结合进行动态查询
OData是一个非常灵活的RESTful API,如果要做出强大的查询API,那么OData就强烈推荐了.http://www.odata.org/ OData的特点就是可以根据传入参数动态生成Ent ...
- MVC Nhibernate 示例
首先,非常感谢提出问题的朋友们,使得本人又去深入研究了NHibernate的<Session-Per-Request 模式>. 前言: 谈到NHibernate大伙并不陌生,搞Java ...
- Nhibernate mapping 文件编写
生成工具软件 现在生成工具软件有很多了,例如商业软件:NMG.CodeSmith.Visual NHibernate,开源软件:MyGeneration.NHibernate Modeller.AjG ...
随机推荐
- MySQL之基础功能
一.视图 视图:是一个虚拟表,其内容由查询定义.同真实的表一样,视图包含一系列带有名称的列和行数据 视图有如下特点: 1. 视图的列可以来自不同的表,是表的抽象和逻辑意义上建立的新关系. 2. 视图是 ...
- spring-cloud-sleuth+zipkin追踪服务实现(一)
1.简述 最近在学习spring cloud构建微服务,研究追踪微服务rest服务调用链路的问题,接触到zipkin,而spring cloud也提供了spring-cloud-sleuth来方便集成 ...
- day4迭代器&生成器&正则表达式
一.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不能后退,不过这也没什么,因为人们很少在迭代途中后退.另外,迭代器的一大优点 ...
- 洛谷P3803 【模板】多项式乘法 [NTT]
题目传送门 多项式乘法 题目描述 给定一个n次多项式F(x),和一个m次多项式G(x). 请求出F(x)和G(x)的卷积. 输入输出格式 输入格式: 第一行2个正整数n,m. 接下来一行n+1个数字, ...
- Python并发编程-协程
利用Greenlet模块在多线程之间切换 from greenlet import greenlet def eat(): print('eating start') g2.switch() prin ...
- heartbeat与keepalived的区别
Heartbeat与Keepalived的区别 Keepalived使用的vrrp协议方式,虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP):H ...
- java项目日志系统的总结
目录 日志系统归类以及关系 日志的三个组件 slf4j的使用 项目中构建日志系统 使用例子 日志系统归类以及关系 常用的日志框架: slf4j.logback .log4j.log4j2.JUL(ja ...
- 【SpringBoot】关闭HttpClient无用日志
环境: SpringBoot pom依赖了apache.commons.HttpClient: <!--httpclient--> <dependency> <group ...
- iOS 9音频应用播放音频之控制播放速度
iOS 9音频应用播放音频之控制播放速度 iOS 9音频控制播放速度 iOS9音频文件在播放时是以一定的速度进行的.这个速度是可以进行更改的,从而实现iOS9音频文件的快速播放和慢速播放功能.要实现i ...
- Vue.js 系列教程 3:Vue
原文:intro-to-vue-3-vue-cli-lifecycle-hooks 译者:nzbin 这是 JavaScript 框架 Vue.js 五篇教程的第三部分.在这一部分,我们将学习 Vue ...