代码改变世界

NHibernate3剖析:Mapping篇之Mapping概览

2010-04-22 19:36 by 李永京, ... 阅读, ... 评论, 收藏, 编辑

本节内容

系列引入

NHibernate3.0剖析系列分别从Configuration篇、Mapping篇、Query篇、Session策略篇、应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种应用程序的集成,基于NHibernte3.0版本。如果你还不熟悉NHibernate,可以快速阅读NHibernate之旅系列文章导航系列入门,如果你已经在用NHibernate了,那么请跟上NHibernate3.0剖析系列吧。

Mapping概述

NHibernate作为典型的ORM工具,我们使用时通常是先定义Domain,再为Domain映射数据库关系,NHibernate映射是使用XML文件形式的。本篇从整体上了解下NHibernate Mapping处理过程及我们编写方式。

Mapping处理过程

当我们Confrontation NHibernate时,NHibernate对Mapping部分到底做了什么事情呢?

  • 解析读取Mapping文件
  • 将Mapping文件反序列化(Deserialize)为XmlDeserialized(就是NHibernate.Cfg.MappingSchema.HbmMapping类)
  • 将HbmMapping类Bind为元数据映射(Mapping-MetaDate),(就是NHibernate.Cfg.Mappings类)
  • Build SessionFactory

用一副图片(摘自Fabio Maulo博客)详细的展示了NHibernate内部的原理:

Mapping Path

接下来我们看看NHibernate的各种映射方式。

Mapping方式

据我长期发现,初学者往往最热衷问的问题是"你们通常怎样写映射文件,是生成的么?",还有问问题有时贴出XML映射的时候总是贴出使用生成器生成出来的映射。

NHibernate映射编写方式现在有很多种了,例如:

  • 生成工具软件 (尽量不要使用)
  • 相关开源项目 (可以使用)
  • 手动编写XML方式 (推荐使用)

从上面的图示可以看出,上面所有的方式最终都是生成XML文件,然后按照Mapping处理过程去处理。

生成工具软件

现在生成工具软件有很多了,例如商业软件:CodeSmith、Visual NHibernate,开源软件:MyGeneration、NHibernate Modeller、AjGenesis等。

CodeSmith

官方地址:http://www.codesmithtools.com/

CodeSmith

提供了NHibernate模板,可以按照需求生成Mapping文件。

Visual NHibernate

官方地址:http://www.slyce.com/

Visual NHibernate

是最新出来的可视化NHibernate映射工具。可以试用一下,效果不错。

MyGeneration

官方地址:http://www.mygenerationsoftware.com/

MyGeneration

像CodeSmith、MyGeneration生成工具NHibernate模板各式各样,生成出来映射、结构不一,非常冗余,对于复杂的Domain总会出现各式各样的错误映射, 大多数时候只是在无可奈何的情况下使用,不过调查发现生成工具往往是初学者的最爱,总觉得不怎么样。

AjGenesis

官方地址:http://ajgenesis.codeplex.com/

AjGenesis

AjGenesis是一个开源项目,按照你定义的模板生成出很多东东,支持语言Java, JSP, ASP.NET, VB.NET, C#, PHP。生成包含有entities, pages, solution和project files, store procedures, DDL scripts等等。

相关开源项目

开源类库有很多,例如NHibernate贡献项目dll2hbm、NHibernate MappingAttributes,开源项目的Castle ActiveRecord、Fluent NHibernate等。

其中NHibernate MappingAttributes和Castle ActiveRecord是在Domain中使用Attribute形式映射的,完全污染了Domain职责。

Fluent NHibernate使用Fluent API形式映射,其API依旧繁琐,其运行最终效果还是利用你映射的Fluent在内部生成非常冗余的XML文件。

手动编写XML方式

发现更多的人都喜欢自己手动编写XML文件的,这样比较灵活、简便,在这里我也特别推荐使用,一方面熟悉了Mapping技能,一方面增加了经验。

我们只需为Microsoft Visual Studio 2010添加编写NHibernate配置和映射智能提示的功能。只要在下载的NHibernate压缩包里找到configuration.xsd和 nhibernate-mapping.xsd两个文件并复制到C:\Program Files\Microsoft Visual Studio 10.0\Xml\Schemas目录即可。

Mapping xml

结语

开始NH剖析的Mapping篇,这篇文章先大体了解下Mapping的方式。根据在群里面的反应情况,在以后我分为两个部分开始介绍Mapping,分别从Mapping映射和ConfORM实战两个角度。

Mapping映射:介绍各种Mapping节点映射,让大家了解下各种Mapping,使用手动编写XML方式。

ConfORM实战:用ORuM思想实现对Domain的映射。

希望本文对你有所帮助。