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 |
转载于:https://www.cnblogs.com/zjoch/p/3811288.html
NHibernate Configuring相关推荐
- NHibernate.3.0.Cookbook第三章第9节的翻译
Using stateless sessions 使用无状态会话 当进行大量数据处理的时候,可能会放弃使用一些高级特性,而使用更接近底层的API来提高性能.在NHibernate中,这种高性能的底层A ...
- NHibernate.3.0.Cookbook第三章第8节的翻译
Using session.Refresh 使用session.Refresh 特别是在桌面应用程序中,重新加载实体以反映她在不同会话中的新进修改,本节介绍如何使用session.Refresh来刷新 ...
- Simple NHibernate Architecture[from]
原文地址:http://www.codeproject.com/aspnet/NHibernateArchitecture.asp Download source - 2,523.7 KB Intro ...
- NHibernate从入门到精通系列(7)——多对一关联映射
内容摘要 多对一关联映射概括 多对一关联映射插入和查询 多对一关联映配置介绍 一.多对一关联映射概括 关联关系是实体类与实体类之间的结构关系,分别为"多对一"."一对一& ...
- NHibernate初学体验记
NHibernate 是一个基于.Net 的针对关系型数据库的对象持久化类库.NHibernate 来源于优秀的基于Java的关系型持久化工具Hibernate.NHibernate持久化你的.Net ...
- ActiveRecordBase借助NHibernate的条件获取实体类对象
ActiveRecordBase.FindAll() 函数其中有一个这样的版本的参数 ActiveRecordBase.FindAll(TargetType As System.Type,Orders ...
- 未能从程序集 XX加载类型XXX的错误解决方法(借以提醒NHibernate使用者)
这是写.hbm.xml文件最容易犯的错误之一 首先,Class的Name属性必须是"完全限定类名,程序集名" 这里,例如 <class name="ibiz.cor ...
- ORM武器:NHibernate(三)五个步骤+简单对象CRUD+HQL
前面的两篇文章中.我们对NHibernate已经做了大致了解 <ORM利器:NHibernate(一)简单介绍>Nhibernate的作用:攻克了对象和数据库的转化问题 <ORM利器 ...
- [NHibernate]代码生成器的使用
目录 写在前面 文档与系列文章 代码生成器的使用 总结 写在前面 前面的文章介绍了nhibernate的相关知识,都是自己手敲的代码,有时候显得特别的麻烦,比如你必须编写持久化类,映射文件等等,举得例 ...
- NHibernate和Cuyahoga(二)(翻译):
原文:http://www.cuyahoga-project.org/home/developers.aspx Mappings: 在我们使用像NHibernate这样强大的ORM工具的时候,映射类有 ...
最新文章
- R语言ggplot2可视化时避免geom_bar对x轴进行排序实战:直接对因子变量进行提前排序后再进行可视化、使用scale_x_discrete函数限定因子顺序
- java中使用base64加密解密16进制方法
- lvdt 运放全波整流接线方式_常见的几种二极管整流电路解析
- mysql 手工修复_MySQL自动备份和手工恢复
- COCO 数据集格式及mmdetection中的转换方法
- 【计算机科学基础】控制复杂性的艺术
- java dojo_Dojo入门三种HelloWorld!
- 监听独立于数据库服务器的配置,解决ORA-12520及ORA-12545错误
- Android 移动应用开发模拟题
- 基于开源SDN控制器的下一代金融云网络的研究与实践
- 搭建 LimeSurvey投票调查问卷系统
- 新华象形大字典隐私用户数据声明
- spring quartz 表达式在线生成器
- Android APP打开另一个APP完整逻辑实现
- docker run 挂载卷_Docker容器数据卷-Volume小结
- Android Studio 搭建微信界面
- How browsers work翻译
- POJ1061青蛙的约会(拓展欧几里得)
- 哪种深度学习框架发展最快?
- 黑平台出金路上连环套客服爱答不理 投诉多了换域名换皮接着干
热门文章
- Angular.js-开发前笔记
- [译]反射(Reflection)和动态(dynamic)
- 今天又感受到了编程的乐趣
- linux jvm启动过程,Linux操作系统启动过程详解
- mysql 数据库隔离级别_彻底搞懂mysql数据库四种隔离级别,实验实战
- usb环境Linux,Linux环境下USB的原理、驱动和配置
- 链表 -- 2.2.1 Add Two Numbers -- 图解
- SSM返回中文乱码问题,SpringMVC返回中文乱码,SSM返回String字符串乱码问题
- MyBatis集合Spring(三)之mapper
- 【渝粤教育】国家开放大学2018年春季 0242-21T机械制图 参考试题