NHibernate移除了对Iesi.Collections类库的使用,并改进了对SQL Server 2012的支持

NHibernate已经发布了4.0的GA(Gammer)版,它提供了对.NET 4.0的支持,移除了对Iesi.Collections类库的使用,并且加入了对某些SQL Server 2012特性的支持,例如序列(Sequence)及查询分页。

本次新版本的发布共包含三个主要变化:首先,新版本的NHibernate是基于.NET 4.0创建的,这是一个破坏性的改变。由于这一变化,原先进行类映射时所使用的lesi.Collection类库中所定义的ISet类就被.NET基础类库中的泛型类型ISet<T>所取代了。对于非泛型集合的持久化支持也同样被移除了。在.NET 4.0版本之前,基础类库中还没有定义ISet这个接口,而当时NHibernate刚刚才从Hibernate移植到.NET平台上。这也是在NHibernate中包含了对lesi.Collections类库的依赖的关键原因之一。由于.NET 4.0中引入了ISet<T>这个接口,这个类库的引用就显得多余了,因此被最终移除。

请注意:NHibernate在内部仍然保持了对lesi.collections类库的引用,但对于大多数用例来说,开发者们都可以直接使用.NET基础类库即可完成任务。

此外,4.0版本现在能够支持ODP.NET,即Oracle的托管Data Provider for .NET,此外还支持SQL Server 2012中一些独有的新特性:

  • 序列 —— 类似于它对Oracle和Postgres实现的支持(在2012之前,SQL Server中还不存在序列的概念,只有自动生成数字的主键列可以自增值)。
  • “iif”方法。
  • 查询分页 —— 确保当NH LINQ中使用Skip()和Take()方法时,转换为SQL Server中相应的OFFSET和FETCH查询语法。

除此之外,新版本还包括一些新的改进。包括以下一些内容:

  • 在使用QueryOver进行转换时可以使用Math.Round()方法了。
  • 支持SQL Server所独有的power()函数。
  • NHibernateUtil中的静态字段不再封装为可空类型(NullableType)或IType接口类型。
  • 支持Postgresql中的Trigonometric函数
  • Save/Update/SaveOrUpdate等方法会加入一些新的重载,以实体名称作为参数。
  • 在多对多关系中也可使用Where()语法。

总的来说,新版本包括了超过一百个bug修复以及各种小改进,有一些改动有可能会造成破坏性改变。请务必阅读关于这次发布的说明,或者从NH的JIRA网站上获取完整的变更列表。

下一步计划

通过快速浏览NH的JIRA网站后,我们发现4.1.0版本的部分工作已经开始进行了,接下来会有一些有趣的新特性陆续到来:

  • 对Oracle 12c独有语法的支持。Oracle 12c支持标识列、新的分页关键字(FETCH FIRST与OFFSET),以及一些新的类型(VARCHAR2、NVARCHAR2、RAW等等)。
  • PrePersist与PreUpdate属性(类似于Hibernate中对应的标注方式)
  • 可用于WCF Data Services的NHibernateContext(作为DataContext的替代)
  • 在<join>节点中使用property-refs

NHibernate可能会加入对WCF Data Services的支持,这一点令人很感兴趣,尤其是在WCF Data Services的前景不明的情况下(虽然有一些非议,但WCF Data Services中还是加入了对EF6的支持)。

NHibernate是一个成熟的开源对象关系映射框架,它是从面向Java世界的Hibernate框架移植过来的。NHibernate曾一度是毫无争议的首选ORM框架,但随着微软推出Entity Framework,并且如今已经成为了开源产品之后,人们对于NH的未来也开始抱有一丝疑虑(当然,还是有许多人在争辩之后依然推崇NHibernate)。

查看英文原文:NHibernate Lets Go Of Iesi.Collections, Improves Support For SQL Server 2012

你可能感兴趣的:(NHibernate移除了对Iesi.Collections类库的使用,并改进了对SQL Server 2012的支持)