NHibernate3剖析:Mapping篇之Mapping概览

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内部的原理:

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

Mapping方式

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

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

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

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

生成工具软件

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

CodeSmith

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

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

Visual NHibernate

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

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

MyGeneration

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

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

AjGenesis

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

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目录即可。

结语

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

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

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

希望本文对你有所帮助。

版权声明:本文为博主http://www.zuiniusn.com 原创文章,未经博主允许不得转载。

时间: 2024-08-27 08:07:15

NHibernate3剖析:Mapping篇之Mapping概览的相关文章

NHibernate3剖析:Mapping篇之ConfORM实战(3):OneToOne语义

系列引入 NHibernate3剖析系列分别从Configuration篇.Mapping篇.Session篇.Core篇.Tool篇.Practice篇.Extension篇等方面全面揭示NHibernate3版本内容.特性及其应用,完全基于NHibernte3版本. NHibernate专题:http://kb.cnblogs.com/zt/nhibernate/ NHibernate官方站点:http://nhforge.org/ NHibernate参考文档:http://nhforge

NHibernate3剖析:Mapping篇之集合映射基础(3):List映射

系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Session策略篇.应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种应用程序的集成,基于NHibernte3.0版本号. 假设你还不熟悉NHibernate.能够高速阅读NHibernate之旅系列文章导航系列入门,假设你已经在用NHibernate了,那么请跟上NHibernate3.0剖析系列吧. NHibernate专题:http://kb.cnblogs.c

NHibernate3剖析:Mapping篇之ConfORM实战(2):原理

系列引入 NHibernate3剖析系列分别从Configuration篇.Mapping篇.Session篇.Core篇.Tool篇.Practice篇.Extension篇等方面全面揭示NHibernate3版本内容.特性及其应用,完全基于NHibernte3版本. NHibernate专题:http://kb.cnblogs.com/zt/nhibernate/ NHibernate官方站点:http://nhforge.org/ NHibernate参考文档:http://nhforge

NHibernate3剖析:Mapping篇之集合映射基础(4):Map映射

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

NHibernate3剖析:Mapping篇之集合映射基础(2):Bag映射

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

NHibernate3剖析:Query篇之NHibernate.Linq自定义扩展

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

NHibernate3剖析:Query篇之NHibernate.Linq增强查询

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

elasticsearch篇之mapping

2018年05月17日 18:01:37 lyzkks 阅读数:444更多 个人分类: Elastic stack 版权声明:文章内容来自于网络和博主自身学习体会,转载请注明出处,欢迎留言大家一起讨论学习~~ https://blog.csdn.net/sinat_35930259/article/details/80354732 什么是mapping mapping是类似于数据库中的表结构定义,主要作用如下: 定义index下的字段名 定义字段类型,比如数值型.浮点型.布尔型等 定义倒排索引相

NHibernate系列文章二十七:NHibernate Mapping之Fluent Mapping(附程序下载)

摘要 从这一节起,介绍NHibernate Mapping的内容.前面文章都是使用的NHibernate XML Mapping.NHibernate XML Mapping是NHibernate最早最成熟的Mapping方法.其他的Mapping方法都是基于XML Mapping的思想进行的“变种”,要么暂时不能完全像XML Mapping那样功能丰富.其他的Mapping方法目前包括:Fluent Mapping.Attribute Mapping和Mapping by Convention