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,布布扣,bubuko.com

时间: 2024-10-25 14:34:01

NHibernate Configuring的相关文章

[Nhibernate]Nhibernate系列之体系结构

引言 在项目中也有用到过nhibernate但对nhibernate的认识,也存留在会用的阶段,从没深入的学习过,决定对nhibernate做一个系统的学习. ORM 对象-关系映射(OBJECT/RELATION MAPPING,简称ORM),是随着面向对象的软件开发方法发展而产生的.面向对象的开发方法是当今企业级应用开发环境中的主流开发方法,关系数据库是企业级应用环境中永久存放数据的主流数据存储系统.对象和关系数据是业务实体的两种表现形式,业务实体在内存中表现为对象,在数据库中表现为关系数据

NHibernate常见问题及解决方法

NHibernate常见问题及解决方法 曾经学过NHibernate的,但是自从工作到现在快一年了却从未用到过,近来要巩固一下却发现忘记了许多,一个"in expected: <end-of-text> (possibly an invalid or unmapped class name was used in the query)."错误查了好半天终于查到了.这篇文章是我转载的NHibernate的常见错误... hbm.xmlNHibernate文件中版本号可能引起的

Linq To Nhibernate 性能优化(入门级)

最近都是在用Nhibernate和数据库打交道,说实话的,我觉得Nhibernate比Ado.Net更好用,但是在对于一些复杂的查询Nhibernate还是比不上Ado.Net.废话不多说了,下面讲讲Linq To Nhibernate的性能优化. 第一点:应该要分清楚当前代码是在数据库上执行,还是在内存中执行(或者什么时候应该在数据库上做,什么时候应该在内存做) 我们在在做查询的时候,常见的使用方法 上面是使用了Iqueryable接口的,它会把数据先筛完了之后,再返回给我们 这个在数据库里呢

NHibernate框架与BLL+DAL+Model+Controller+UI 多层架构十分相似--『Spring.NET+NHibernate+泛型』概述、知识准备及介绍(一)

原文://http://blog.csdn.net/wb09100310/article/details/47271555 1. 概述 搭建了Spring.NET+NHibernate的一个数据查询系统.之前没用过这两个框架,也算是先学现买,在做完设计之 后花了一周搭建成功了.其中,还加上了我的一些改进思想,把DAO和BLL之中相似且常用的增删改查通过泛型T抽象到了DAO和BLL的父类中,其DAO 和BLL子类只需继承父类就拥有了这些方法.和之前的一个数据库表(视图)对应一个实体,一个实体对应一

Configuring Single Number Reach on Cisco CUCM 7.1.3

Cisco CUCM allows you to configure single number reach (also known as mobility) so that a call destined for your desk phone's extension can ring on a number of other devices such as your cellphone, blackberry, home phone, etc.  This feature also allo

使用NHibernate(10) -- 补充(inverse &amp;&amp; cascade)

1,inverse属性的作用: 只有集合标记(set/map/list/array/bag)才有invers属性: 以set为例,set的inverse属性决定是否把对set的改动反应到数据库中去,inverse=false(反应),inverse=true(不反应):默认值是false; one-to-many 和many-to-many都适用: inverse等于false时,对于one-to-many,如果删除"一"方,NH会先执行Update语句来把"多"方

[NHibernate]ISessionFactory配置

系列文章 [Nhibernate]体系结构 引言 在上篇文章学习了orm和nhibernate相关概念,这篇文章主要学习ISessionFactory如何配置. 因为NHibernate被设计为可以在许多不同环境下工作,所以它有很多配置参数.不过,大部分都已经有默认值了.NHibernate.Test.dll包含了一个示例的配置文件app.config,它演示了一些可变的参数. 可编程配置方式 NHibernate. Cfg.Configuration的一个实例代表了应用程序中所有的.Net类到

NHibernate VS IbatisNet

  NHibernate 是当前最流行的 Java O/R mapping 框架Hibernate 的移植版本,当前版本是 1.0 .2 .它出身于sf.net..IbatisNet 是另外一种优秀的 Java O/R mapping框架,当前版本是 1.2 .目前属于 apache 的一个子项目了. 相对 NHibernate " O/R "而言, IbatisNet 是一种" Sql Mapping "的 ORM实现.NHibernate 对数据库结构提供了较为

NHibernate连接oracle报错

NHibernate.Exceptions.GenericADOException:“could not execute query [ select sys_user0_.USERID as USERID1_0_, sys_user0_.LOGINNAME as LOGINN2_0_, sys_user0_.LOGINPASSWORD as LOGINP3_0_, sys_user0_.DEPTID as DEPTID4_0_, sys_user0_.REALNAME as REALNA5_0