NHibernate
是一个面向.NET环境的对象/关系数据库映射工具。

对象/关系数据库映射(object/relational mapping (ORM))
这个术语表示一种技术,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。

ISession
是一个 持久化管理器, 我们通过ISession来从数据库中存取表。

ISessionFactory
代表一个数据库,并且使用一个XML配置文件(Web.config或者hibernate.cfg.xml)。

Configuration实例
NHibernate通过对Configuration().Configure()的调用来装载配置文件,并初始化成一个Configuration实例;通过Configuration实例创建一个ISessionFactory。

NHibernate体系结构
NHibernate使用数据库和配置信息来为应用程序提供持久化服务(以及持久的对象)。

ITransaction (NHibernate.ITransaction)
(可选的)应用程序用来指定原子操作单元范围的对象,它是单线程的,生命周期很短。

IConnectionProvider (NHibernate.Connection.IConnectionProvider)
(可选的)生成ADO.NET连接以及Command对象的工厂。 它通过抽象将应用从底层的IDbConnection或IDbCommand隔离开。 仅供开发者扩展/实现用,并不暴露给应用程序使用。

IDriver (NHibernate.Driver.IDriver)
(可选的)一个封装了不同ADO.NET providers之间的差异(利用参数命名转换等ADO.NET支持的特性)的接口。

ITransactionFactory (NHibernate.Transaction.ITransactionFactory)
(可选的)生成ITransaction对象实例的工厂。 仅供开发者扩展/实现用,并不暴露给应用程序使用。

实例状态
一个持久化类的实例可能处于三种不同状态中的某一种。 这三种状态的定义则与所谓的持久化上下文(persistence context)有关。 NHibernate的ISession对象就是这个所谓的持久化上下文。

瞬态(transient)
该实例从未与任何持久化上下文关联过。它没有持久化标识(相当于主键值)。

持久化(persistent)
实例目前与某个持久化上下文有关联。 它拥有持久化标识(相当于主键值),并且可能在数据库中有一个对应的行。 对于某一个特定的持久化上下文,NHibernate保证持久化标识与CLR标识(其值代表对象在内存中的位置)等价。

脱管(detached)
实例曾经与某个持久化上下文发生过关联,不过那个上下文被关闭了, 或者这个实例是被序列化(serialize)到另外的进程。 它拥有持久化标识,并且在数据库中可能存在一个对应的行。 对于脱管状态的实例,NHibernate不保证任何持久化标识和CLR标识的关系。

可编程的配置方式
一个NHibernate.Cfg.Configuration实例代表了一个应用程序中.NET类型 到SQL数据库映射的完整集合. Configuration被用来构建一个(不可变的 (immutable)) ISessionFactory. 映射定义则由不同的XML映射定义文件编译而来。

外连接抓取(Outer Join Fetching)
如果你的数据库支持ANSI, Oracle或Sybase风格的外连接, 外连接抓取通常能通过限制往返数据库次数 (更多的工作交由数据库自己来完成)来提高效率.

日志
NHibernate使用Apache log4net来为各种事件记录日志。

XML配置文件
在hibernate.cfg.xml文件中指定一套完整的配置.

持久化类(Persistent Classes)
在应用程序中,用来实现业务问题实体的(如,在电子商务应用程序中的Customer和Order) 类就是持久化类。

映射定义(Mapping declaration)
对象和关系数据库之间的映射是用一个XML文档(XML document)来定义的。

composite-id 联合ID
如果表使用联合主键,你可以把类的多个属性组合成为标识符属性。

鉴别器
在"一棵对象继承树对应一个表"的策略中,<discriminator>元素是必需的, 它定义了表的鉴别器字段。

property
<property>元素为类定义了一个持久化类的属性。

连接(join)
使用 <join> 元素,可以将一个类的属性映射到多张表中。 当表之间存在一对一关系的时候使用。

持久化集合类
NHibernate要求持久化集合值字段必须声明为接口。

延迟加载
集合(不包括数组)是可以延迟初始化的,意思是仅仅当应用程序需要访问时,才载入他们的值。

有序集合(Sorted collections)
NHibernate支持实现System.Collections.SortedList和Iesi.Collections.SortedSet 的集合。

双向关联(Bidirectional associations)
双向关联允许通过关联的任一端访问另外一端。在NHibernate中, 支持两种类型的双向关联: 
一对多(one-to-many),多对多(many-to-many)

继承映射(Inheritance Mappings)
NHibernate支持三种基本的继承映射策略: 
每个类分层结构一张表(table per class hierarchy)单表继承 
每个子类一张表(table per subclass)类表继承 
每个具体类一张表(table per concrete class)具体表继承 
此外,NHibernate还支持第四种稍有不同的多态映射策略: 
隐式多态(implicit polymorphism)

加载对象
如果你已知某个持久化实例的标识符,ISession的Load()方法让你取出它。

查询
如果你不能确定你要寻找的对象的标示符,请使用ISession的Find() 方法。

元数据API
NHibernate中有一个非常丰富的元级别(meta-level)的模型,含有所有的实体和值类型数据的元数据。

事务和并发
NHibernate本身并不是数据库,它只是一个轻量级的对象-关系数据库映射(object-relational)工具。 它的事务交由底层的数据库连接管理,如果数据库连接有分布式事务的支持, 那么在 ISession 中进行的操作将是整个原子性分布式事务的一部分。NHibernate可以看作是添加了面向对象语义的ADO.NET瘦适配器(thin adapter)。

拦截器与事件
应用程序能够响应NHibernate内部产生的特定事件是非常有用的。这样就允许实现某些通用的功能 以及允许对NHibernate功能进行扩展。

HQL: NHibernate查询语言
NHibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL。但是, HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承、多态 和关联之类的概念。

NHibernate 过滤器(filters) 
NHibernate 1.2新增了对某个类或者集合使用预先定义的过滤器条件(filter criteria)的功能。 过滤器条件相当于定义一个 非常类似于类和各种集合上的“where”属性的约束子句,但是过滤器条件可以带参数。 应用程序可以在运行时决定是否启用给定的过滤器,以及使用什么样的参数值。 过滤器的用法很像数据库视图,只不过是在应用程序中确定使用什么样的参数的。

抓取策略
抓取策略(fetching strategy) 是指: 当应用程序需要在(NHibernate实体对象图的)关联关系间进行导航的时候, NHibernate如何获取关联对象的策略。

工具箱
通过NHibernate项目中提供的几个命令行代码生成工具(他们也被当作项目的一部分不断得到维护),还有一些其他的第三方工具(MyGeneration, CodeSmith, ObjectMapper, AndroMDA)。 
NHibernate的主发行包中附带了最重要的工具(甚至在NHibernate内部也可以快速调用这个工具): 
从映射文件到DDL schema的生成器(也就是SchemaExport, hbm2ddl) 
NHibernate项目直接提供的其他工具在一个单独的发行包中发布,NHibernateContrib。这个发行包包含了下列任务的工具: 
使用映射文件生成C#代码的hbm2net。 
使用.NET的attributes生成映射文件的NHibernate.Mapping.Attributes, 或者 NHMA for short)。 
NHibernate第三方支持工具包括: 
CodeSmith, MyGeneration, 以及 ObjectMapper (利用已有数据库结构生成映射文件) 
AndroMDA (MDA (模型驱动架构) 利用UML以及他们的XML/XMI展示生成持久化类文件)

NHibernate重要概念的解释和说明相关推荐

  1. 0day一些概念的解释,及Scene组、iNT组、TOP组的一些介绍

    对电影.电视剧等资源来源有兴趣的童鞋的科普,需要一定的混PT的经验才能看懂!有相关经验的,定会收益很多,有种豁然开朗的感觉!! 关键词一:0day 广义上的0day包含两种概念: 0day攻击,一种对 ...

  2. dB、dBm、dBc等概念的解释

    在刚接触射频开发或者射频模块相关的应用的时候,通常会对这几个概率感到陌生,本人通过网络收集并整理了这几个概率的详细解释,作为日后工作学习中的参考.当然,DB的数学基础就是指数函数与对数函数互为反函数的 ...

  3. Oracle实例与数据库的概念详细解释

    刚接触ORACLE的人肯定会对实例和数据库感到困惑,实例到底代表些什么?为什么会有这个概念的出现? ORACLE实例 = 进程 + 进程所使用的内存(SGA)实例是一个临时性的东西,你也可以认为它代表 ...

  4. 名词、文化概念的解释

    内圣外王:以菩萨心肠,行霹雳手段: 开车蛇形:一左一右,摇摆不定: 0. 文化概念 编者按:编辑人员对一篇文章或一条消息所加的意见.评论等,常常放在文章或消息的前面.也称作编者案(editor's n ...

  5. (摘)导数、偏导数、方向导数、梯度、梯度下降概念和解释

    前言 机器学习中的大部分问题都是优化问题,而绝大部分优化问题都可以使用梯度下降法处理,那么搞懂什么是梯度,什么是梯度下降法就非常重要!这是基础中的基础,也是必须掌握的概念! 提到梯度,就必须从导数(d ...

  6. (转)导数、偏导数、方向导数、梯度、梯度下降概念和解释

    转自:https://www.cnblogs.com/lingjiajun/p/9895753.html 前言 机器学习中的大部分问题都是优化问题,而绝大部分优化问题都可以使用梯度下降法处理,那么搞懂 ...

  7. CVPR2021 | 视觉推理解释框架VRX:用结构化视觉概念作为解释网络推理逻辑的「语言」

    本文提出了一个视觉推理解释框架 (VRX: Visual Reasoning eXplanation),将人们容易理解的.high-level 的结构化的视觉概念作为「语言」,通过回答为什么是 A,为 ...

  8. CVPR 2021 | 视觉推理解释框架VRX:用结构化视觉概念作为解释网络推理逻辑的「语言」...

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 作者:葛云皓  |  编辑:Amusi 本文提出了一个视觉推理解释框架 (VRX: Visual Reaso ...

  9. SIFT算法中概念简单解释

    尺度空间 真实世界的物体只有在一定尺度上才有意义,例如我们能够看到放在桌子上的水杯,但对于整个银河系,这个水杯是不存在的.物体的这种多尺度的本质在自然界中是普遍存在的.尺度空间就是试图在数字图像领域复 ...

最新文章

  1. cas 单点登录_47 使用cas完成单点登录-02 搭建cas client完成单点登录
  2. 关于用Restful API下载网易云笔记时遇到的图片外链不能打开的问题
  3. 菜鸟读jQuery 2.0.3 源码分析系列(1)
  4. 复现原文(一):Single-cell RNA sequencing of human kidney(step by step)
  5. 文件实时上传至云服务器的方法,文件实时上传至云服务器的方法
  6. 剑指offer之顺时针打印矩阵
  7. Apache Solr 未授权上传(RCE)漏洞(CVE-2020-13957)的原理分析与验证
  8. centos7 查看oracle运行日志_Linux(CentOS7)部署系列---常规应用部署方案
  9. Android零基础入门第42节:自定义BaseAdapter
  10. 解决 spring cloud git config 配置中心多环境问题
  11. 斯坦福大学公开课:机器学习的动机与应用
  12. 安装新操作系统需要注意的问题
  13. 钉钉用不同的手机签到后台怎么显示的代签到有用吗
  14. JavaScript中的Map、Set及其遍历
  15. STM32进入低功耗模式以及唤醒(RTC+中断)
  16. 正则环视 php,正则高级环视
  17. ZJOI2020游记
  18. form.submit() 提交部分浏览器不管用
  19. 【设计模式】【结构型模式】装饰器模式
  20. hp计算机控制面板,HP5000打印机控制面板菜单解释

热门文章

  1. Docker 容器启动失败日志分析方法,启动sonic容器实例simple时未报错运行一会又停止的问题排查实例演示
  2. Github上删除仓库、项目方法演示
  3. C++ leetcode 面试题64. 求1+2+…+n
  4. C# 学习笔记(15)自己的串口助手----波形显示
  5. C#上位机软件串口数据接收用Invoke(同步)和BeginInvoke(异步)的区别
  6. 三星电子电容器件识别
  7. [YTU]_2442( C++习题 矩阵求和--重载运算符)
  8. 稀疏编码(Sparse Coding)(二)
  9. C++ Vector 使用总结
  10. 【量化投资】策略五(聚宽)