HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

NHibernate 3 版本新特性

  • 2010-12-14
  • 本文字数:2621 字

    阅读完需:约 9 分钟

2010 年 12 月 4 号 Fabio Maulo 发布了 NHibernate 3.0.0.GA 正式版本,基于.Net3.5 和.NET 3.5 Client Profile 平台,主要改变是增加 Loquacious 配置和基于 Lambda 表达式查询和 Linq 查询。你可以到这里下载NHibernate 3.0.0.GA。接着Fabio Maulo 陆续发了 NHibernate.Caches.3.0.0.GA NHibernate.Validator.1.3.0.Alpha1 ConfORM 1.0.1.2

下面是 NHibernate 3 版本新特性:

在 Configuration 部分新增两种 Loquacious-Configuration 方式:流配置 (fluent-configuration)lambda 表达式配置 (lambda-configuration)

fluent-configuration 顾名思义,使用 Fluent API 配置 SessionFactory 属性,提供强类型支持、编译期错误检查等。你可以通过 SessionFactory fluent 配置了解详细信息。例如使用流配置方式最小配置 NHibernate:

复制代码
var configure = new Configuration();
configure.SessionFactory()
.Named("Demo")
.Proxy.Through<ProxyFactoryFactory>()
.Integrate
.Using<MsSql2008Dialect>()
.Connected
.Using("ConnectionString");

lambda-configuration 是利用 C#3.0 扩展方法 (Extension Methods) 配置 SessionFactory 属性。你可以通过 Configuration 篇之 SessionFactory lambda 配置 Cache lambda-configuration 配置了解详情。例如使用 lambda 表达式方式最小配置 NHibernate:

复制代码
var configure = new Configuration();
configure.SessionFactoryName("Demo");
configure.Proxy(p => p.ProxyFactoryFactory<ProxyFactoryFactory>());
configure.DataBaseIntegration(db =>
{
db.Dialect<MsSql2008Dialect>();
db.Driver<SqlClientDriver>();
db.ConnectionString = ConnectionString;
});

新增WcfOperationSessionContext 类提供对 WCF 环境的支持,我们直接配置"current_session_context_class"为"wcf_operation"在 WCF 环境中应用 NHibernate。

对于 Mapping 部分,Fabio Maulo 完全重构了 NHibernate.Cfg.MappingSchema 代码部分,提高了性能。同时为 NHibernate 专门设计了一个配置 ORM 工具—— ConfORM :解析 Domain 结构,按照模式适配器和自定义配置生成 HbmMapping 类,避免 NHibernate 通过读取 XML 映射文件反序列化等方式生成 HbmMapping 类的过程。不过 ConfORM 不是 NHibernate 的一部分,需要另外单独下载。李永京在自己的博客中介绍了这个工具,可以参考 ConfORM 概览原理 OneToOne 语义 ManyToMany 语义 Component 语义。我们可以这样使用:

复制代码
var orm = new ObjectRelationalMapper();
orm.TablePerClass<Domain>();
var mapper = new Mapper(orm);
var hbmMapping= mapper.CompileMappingFor(new[] { typeof(Domain) });

在 Configuration 类中新增了AddDeserializedMapping(HbmMapping mappingDocument, string documentFileName) 方法,可以直接解析 HbmMapping,这样选择不使用 xml 文件而是 ConfORM。例如上面使用 ConfORM 生成的 hbmMapping 我们加到 Configuration 中:

复制代码
var conf=new Configuration();
//...
conf.AddDeserializedMapping(hbmMapping, "Domain");

在 NHibernate 3.0.0 版本中,Query 方式新增了Linq 支持强类型查询 API(QueryOver)两种查询方式。

QueryOver 是 Lambda 表达式方式的条件 (Criteria) 查询,可读性强且支持 property-renaming 特性。可以参考 QueryOver in NH 3.0 。例如下面查询 Name 为李永京、按照 Age 降序的 Person 集合:

复制代码
var query = s.QueryOver<Person>()
.Where(p => p.Name == " 李永京 ")
.OrderBy(p => p.Age).Asc
.List();

Linq 基于 HQL AST 分析器的 Linq Provider 实现,由 Steve Strong 贡献者开发的,底层使用第三方 Re-Linq 开源框架。不过 NHibernate3.0.0 版本提供的 Linq 查询还处于 Bate 阶段,Fabio Maulo 准备发布 3.1 版本修复 Linq 查询 BUG。可以参考: NHibernate.Linq 标准查询增强查询自定义扩展。我们使用ISession 接口的Query () 扩展方法创建一个 NHibernate.Linq 查询。

复制代码
var query = session.Query<Person>().Where(o => o.Name == " 李永京 ").ToList();

还有其他一些新特性:

  1. 重构 Logging Abstraction 日志系统模块:移除对 log4net.dll 程序集依赖,现在可以用 CommonLogging 或者 NLog 日志系统。可以参考 Using NLog via Common.Logging with NHibernate
  2. 属性延迟加载和 No Proxy 关联特性:具体使用方法可以参考 Ayende 的 NHibernate new feature: Lazy Properties NHibernate new feature: No proxy associations 两篇博文。它仅支持 Castle 的 bytecode-providers,不支持 Spring.Net 和 LinFu 代理。
  3. 映射支持 XDocument、System.Uri、XmlDoc、Local & Utc DateTime 类型。
  4. bytecode-providers 程序集更新:Castle 使用 2010 年 11 月 15 号发布的 2.5.2 正式版本,即 Castle.Core.dll 程序集。LiuFu 使用 2010 年 4 月 5 号发布的 1.04 版本,即 LinFu.DynamicProxy.dll 程序集。

如果从 NHibernate2.1.2 版本升级到 NHibernate3.0.0 版本,需要注意下面改变:

  1. NHibernate3.0.0 版本不支持.Net3.5 以下版本,即.Net2.0 版本不可以升级到 NHibernate3.0.0 版本。
  2. [NH-2392] ICompositeUserType.NullSafeSet 方法签名改变。
  3. [NH-2199] maps/dictionaries 中 null 值不再不加提示地忽略 / 删除。
  4. [NH-1894] SybaseAnywhereDialect 删除,代之以 SybaseASA9Dialect。删除了 Sybase Adaptive Server Enterprise (ASE) 方言。
  5. [NH-2251] Dialect 中的 GetLimitString 签名变化。
  6. [NH-2284] 删除了过时的成员。
  7. [NH-2358] DateTimeOffset 类型现在不再是 DateTime 的替代。

最近一年,网络上出现了一些优秀的 NHibernate 工具:

  1. HQL Language Service for Visual Studio :为我们编写 HQL 查询提供了智能提示和语法验证检查功能。
  2. NHibernate Profile :可视化 NHibernate 性能检测优化工具。
  3. Visual NHibernate :可视化设计和映射工具。
  4. Mindscape NHibernate Designer :VS 设计工具,类似于 EF 设计器。

其中 HQL Language Service for Visual Studio 是一款开源工具,其他都是商业版本。

据我了解的情况来看,将来的版本发布预计一两个月后会发布 3.1 版本,然后就升级至.Net4 平台开发 NHibernate 4 版本,主要就是逐步改写内部代码去掉 Iesi.Collections.dll,使用.Net4 提供的 ISet 集合和添加一些新功能,比如 Duck Typing (鸭子类型) 等。另外,NHibernate 源码将迁移到 CodePlex 网站,使用 Hg 版本控制。

感谢李永伦对本文的审校。

2010-12-14 07:295821

评论

发布
暂无评论
发现更多内容

技术平台&应用开发专题月 | 业务上云后的调试利器—云机一体

用友BIP

用友 用友iuap

阿里云移动研发平台EMAS:2月产品动态

移动研发平台EMAS

阿里云 程序员 emas 移动端 研发工具

坐标PCB公司,想做实时数仓、推生产线看板,和Tapdata Cloud的偶遇来得就是这么凑巧

tapdata

实时数据

拥抱云原生 2.0 时代,Tapdata 入选阿里云首期云原生加速器!

tapdata

数据库 实时数据服务平台

做开发这么久了,还不会搭建服务器Maven私有仓库?这也太Low了吧

冰河

系统架构 程序开发 程序员进阶 编程基础 Maven仓库

Web安全渗透测试基本流程

学神来啦

网络安全 Web 渗透测试 WEB安全 kali

面向编排的运维在阿里的应用 |阿里巴巴DevOps实践指南

阿里云云效

云计算 阿里云 运维 云原生 部署与维护

这是我见过最详细的Nginx 内存池分析

Linux服务器开发

nginx 线程池 Linux服务器开发 Linux后台开发 内存池

Java有了synchronized,为什么还要提供Lock

华为云开发者联盟

Java synchronized 死锁 lock 同步代码块

java编程技术FastDFS 安装和配置

编程江湖

深入跨国互联网业务场景,看华为云数智融合元数据如何打破“数据墙”

华为云开发者联盟

大数据 数据仓库 华为云 元数据 数智融合

推荐算法!基于隐语义模型的协同过滤推荐之商品相似度矩阵

编程江湖

大数据 算法

由Figma封停大疆,看国产IDE如何应对与突围?

Baihai IDP

人工智能 ide AI 基础软件 国产化

云平台是什么?知名云平台有哪些?

行云管家

云计算 阿里云 云服务 云平台

元宇宙,帮助土耳其奶牛产了更多奶?

CECBC

中小型企业CRM系统有哪些好处

低代码小观

销售管理 企业管理 CRM系统 客户关系管理系统 企业管理软件

墨天轮国产数据库沙龙 | 四维纵横姚延栋 :MatrixDB,All-in-One高性能时序数据库

墨天轮

数据库 时序数据库 国产数据库 MatrixDB

智慧城市解决方案提供商万达信息加入龙蜥社区

OpenAnolis小助手

开源 智慧城市 万达集团

WMS是什么?

源字节1号

开源 后端开发

OpenHarmony移植:XTS子系统之应用兼容性测试套件

华为云开发者联盟

OpenHarmony 移植 XTS子系统 acts 测试套件

Figma禁封中国企业,下一个会是Postman吗?国产软件势在必行

Liam

后端 Postman Apifox API swagger

iuap助力三花控股集团打造主数据管理平台

用友BIP

用友 用友iuap

详细解读PolarDB HTAP的功能特性和关键技术

阿里云数据库开源

数据库 阿里云 开源 postgre polarDB

it运维工程师的工作是做什么的?累吗?

行云管家

运维 服务器 IT IT运维

java培训:使用 Disruptor 做springboot内部消息队列

@零度

JAVA开发 springboot

技术平台&应用开发专题月 | 如何保证业务服务稳定运行—用友云原生技术平台高可用能力介绍

用友BIP

用友 用友iuap

TypeScript 2.0开启空值的严格检查

华为云开发者联盟

typescript js 空指针 ts

新一代对抗作战框架MITRE Engage V1版本正式发布

青藤云安全

网络安全 青藤 青藤云安全

技术平台&应用开发专题月 | 企业上云利器-YMS(Yon Middleware Service)

用友BIP

用友 用友iuap

区块链能否助力版权“突围”?

CECBC

为什么MySQL主键查询这么快?

蝉沐风

MySQL 索引 主键查询

NHibernate 3版本新特性_.NET_李永京_InfoQ精选文章