NHibernate重要概念的解释和说明

来源:互联网 发布:手机写码软件 编辑:程序博客网 时间:2024/06/05 08:31
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展示生成持久化类文件) 
0 0
原创粉丝点击