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

转载于:https://www.cnblogs.com/zjoch/p/3811288.html

NHibernate Configuring相关推荐

  1. NHibernate.3.0.Cookbook第三章第9节的翻译

    Using stateless sessions 使用无状态会话 当进行大量数据处理的时候,可能会放弃使用一些高级特性,而使用更接近底层的API来提高性能.在NHibernate中,这种高性能的底层A ...

  2. NHibernate.3.0.Cookbook第三章第8节的翻译

    Using session.Refresh 使用session.Refresh 特别是在桌面应用程序中,重新加载实体以反映她在不同会话中的新进修改,本节介绍如何使用session.Refresh来刷新 ...

  3. Simple NHibernate Architecture[from]

    原文地址:http://www.codeproject.com/aspnet/NHibernateArchitecture.asp Download source - 2,523.7 KB Intro ...

  4. NHibernate从入门到精通系列(7)——多对一关联映射

    内容摘要 多对一关联映射概括 多对一关联映射插入和查询 多对一关联映配置介绍 一.多对一关联映射概括 关联关系是实体类与实体类之间的结构关系,分别为"多对一"."一对一& ...

  5. NHibernate初学体验记

    NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库.NHibernate 来源于优秀的基于Java的关系型持久化工具Hibernate.NHibernate持久化你的.Net ...

  6. ActiveRecordBase借助NHibernate的条件获取实体类对象

    ActiveRecordBase.FindAll() 函数其中有一个这样的版本的参数 ActiveRecordBase.FindAll(TargetType As System.Type,Orders ...

  7. 未能从程序集 XX加载类型XXX的错误解决方法(借以提醒NHibernate使用者)

    这是写.hbm.xml文件最容易犯的错误之一 首先,Class的Name属性必须是"完全限定类名,程序集名" 这里,例如 <class name="ibiz.cor ...

  8. ORM武器:NHibernate(三)五个步骤+简单对象CRUD+HQL

    前面的两篇文章中.我们对NHibernate已经做了大致了解 <ORM利器:NHibernate(一)简单介绍>Nhibernate的作用:攻克了对象和数据库的转化问题 <ORM利器 ...

  9. [NHibernate]代码生成器的使用

    目录 写在前面 文档与系列文章 代码生成器的使用 总结 写在前面 前面的文章介绍了nhibernate的相关知识,都是自己手敲的代码,有时候显得特别的麻烦,比如你必须编写持久化类,映射文件等等,举得例 ...

  10. NHibernate和Cuyahoga(二)(翻译):

    原文:http://www.cuyahoga-project.org/home/developers.aspx Mappings: 在我们使用像NHibernate这样强大的ORM工具的时候,映射类有 ...

最新文章

  1. R语言ggplot2可视化时避免geom_bar对x轴进行排序实战:直接对因子变量进行提前排序后再进行可视化、使用scale_x_discrete函数限定因子顺序
  2. java中使用base64加密解密16进制方法
  3. lvdt 运放全波整流接线方式_常见的几种二极管整流电路解析
  4. mysql 手工修复_MySQL自动备份和手工恢复
  5. COCO 数据集格式及mmdetection中的转换方法
  6. 【计算机科学基础】控制复杂性的艺术
  7. java dojo_Dojo入门三种HelloWorld!
  8. 监听独立于数据库服务器的配置,解决ORA-12520及ORA-12545错误
  9. Android 移动应用开发模拟题
  10. 基于开源SDN控制器的下一代金融云网络的研究与实践
  11. 搭建 LimeSurvey投票调查问卷系统
  12. 新华象形大字典隐私用户数据声明
  13. spring quartz 表达式在线生成器
  14. Android APP打开另一个APP完整逻辑实现
  15. docker run 挂载卷_Docker容器数据卷-Volume小结
  16. Android Studio 搭建微信界面
  17. How browsers work翻译
  18. POJ1061青蛙的约会(拓展欧几里得)
  19. 哪种深度学习框架发展最快?
  20. 黑平台出金路上连环套客服爱答不理 投诉多了换域名换皮接着干

热门文章

  1. Angular.js-开发前笔记
  2. [译]反射(Reflection)和动态(dynamic)
  3. 今天又感受到了编程的乐趣
  4. linux jvm启动过程,Linux操作系统启动过程详解
  5. mysql 数据库隔离级别_彻底搞懂mysql数据库四种隔离级别,实验实战
  6. usb环境Linux,Linux环境下USB的原理、驱动和配置
  7. 链表 -- 2.2.1 Add Two Numbers -- 图解
  8. SSM返回中文乱码问题,SpringMVC返回中文乱码,SSM返回String字符串乱码问题
  9. MyBatis集合Spring(三)之mapper
  10. 【渝粤教育】国家开放大学2018年春季 0242-21T机械制图 参考试题