NHibernate剖析:Mapping篇之Mapping-By-Code(1):概览
2011-04-10 15:24
417 查看
本节内容
ModelMapper概述
ModelMapper架构
结语
参考资料
Mapping-By-Code(代码映射)与其他映射方式不同,Mapping-By-Code是手动配置实体映射,编译映射并转换为HbmMapping对象,
调用Configuration类的void AddDeserializedMapping(HbmMapping mappingDocument, string documentFileName)方法配置Configuration,其他映射(例如Fluent NHibernate、MyGeneration、Visual NHibernate等)实际上是调用AddXmlReader()方法后,反序列化为HbmMapping对象,然后再调用AddDeserializedMapping方法配置Configuration。
最后BuildSessionFactory。Mapping-Path示意图如下:
![](http://images.cnblogs.com/cnblogs_com/lyj/NH3/nh3-mapping-path.png)
特定映射(Specific Mapper)
Conformist映射(Conformist Mapping)
事件拦截器(Events Interceptor)
编译映射(CompileMapping)
![](http://images.cnblogs.com/cnblogs_com/lyj/NH3/ModelMapper-SpecificMapper.png)
![](http://images.cnblogs.com/cnblogs_com/lyj/NH3/ModelMapper-AddMapping.png)
![](http://images.cnblogs.com/cnblogs_com/lyj/NH3/ModelMapper-Events.png)
![](http://images.cnblogs.com/cnblogs_com/lyj/NH3/ModelMapper-CompileMapping.png)
Fabio Maulo:NHibernate 3.2: (part 2) mapping by code
ModelMapper概述
ModelMapper架构
结语
参考资料
ModelMapper概述
NHibernate3.2版本集成Mapping-By-Code(代码映射),其设计思想来源于ConfORM,代码整体构思基于"Loquacious"模式,而不是"fluent-interface"。在NHibernate.Mapping.ByCode命名空间下。Mapping-By-Code(代码映射)与其他映射方式不同,Mapping-By-Code是手动配置实体映射,编译映射并转换为HbmMapping对象,
调用Configuration类的void AddDeserializedMapping(HbmMapping mappingDocument, string documentFileName)方法配置Configuration,其他映射(例如Fluent NHibernate、MyGeneration、Visual NHibernate等)实际上是调用AddXmlReader()方法后,反序列化为HbmMapping对象,然后再调用AddDeserializedMapping方法配置Configuration。
最后BuildSessionFactory。Mapping-Path示意图如下:
![](http://images.cnblogs.com/cnblogs_com/lyj/NH3/nh3-mapping-path.png)
ModelMapper架构
ModelMapper核心是配置领域模型映射,编译并转换为HbmMapping对象。按照其功能ModelMapper类有四个部分,分别是:特定映射(Specific Mapper)
Conformist映射(Conformist Mapping)
事件拦截器(Events Interceptor)
编译映射(CompileMapping)
特定映射(Specific Mapper)
特定映射(Specific Mapper),对特定的类或者特定的某个组件设置定制化映射。由Class、Subclass、JoinedSubclass、UnionSubclass、Component方法提供。![](http://images.cnblogs.com/cnblogs_com/lyj/NH3/ModelMapper-SpecificMapper.png)
Conformist映射(Conformist Mapping)
Conformist映射(Conformist Mapping)是以Class-By-Class方式映射,然后加入ModelMapper类。![](http://images.cnblogs.com/cnblogs_com/lyj/NH3/ModelMapper-AddMapping.png)
事件拦截器(Events Interceptor)
在每种映射行为前后,都定义了事件拦截器,可以通过事件拦截器定义约束。从设计角度上看是对ModelMapper类提供了扩展性。![](http://images.cnblogs.com/cnblogs_com/lyj/NH3/ModelMapper-Events.png)
编译映射(CompileMapping)
把程序中的领域实体的映射编译并转换为NHibernate使用的HbmMapping对象。CompileMappingFor、CompileMappingForEach方法指定特定领域实体,CompileMappingForAllExplicitAddedEntities和CompileMappingForEachExplicitAddedEntity方法已经显式指定提供映射的实体。![](http://images.cnblogs.com/cnblogs_com/lyj/NH3/ModelMapper-CompileMapping.png)
结语
这篇文章首先了解NHibernate3.2新增的Mapping-By-Code(代码映射)的原理,后续的文章以这篇文章为基础学习Mapping-By-Code各种映射。参考资料
Fabio Maulo:NHibernate 3.2 mapping by codeFabio Maulo:NHibernate 3.2: (part 2) mapping by code
相关文章推荐
- NHibernate剖析:Mapping篇之Mapping-By-Code(1):概览
- NHibernate剖析:Mapping篇之Mapping-By-Code(1):概览
- NHibernate剖析:Mapping篇之Mapping-By-Code(2):运用ModelMapper
- NHibernate3剖析:Mapping篇之Mapping概览
- nHibernate Mapping By Code - Introduction
- NHibernate3剖析:Mapping篇之ConfORM实战(1):概览
- NHibernate 3.2 mapping by code
- nHibernate Mapping By Code - One to One
- Nhibernate 映射 FluentApi Mapping by Code
- NHibernate 3.2: (part 2) mapping by code
- NHibernate 3.2: mapping by code conventions
- 使用NHibernate 3.2实现Repository(ORuM)(三)NHibernate、Mapping、Mapping-By-Code
- 使用NHibernate 3.2实现Repository(ORuM)(四)NHibernate、Mapping、Mapping-By-Code、AutoMapping
- NHibernate3剖析:Mapping篇之ConfORM实战(1):概览
- NHibernate: playing with mapping by code
- NHibernate: playing with mapping by code (2)
- nHibernate Mapping By Code - One to Many and Many to One
- nHibernate Mapping By Code - Many to Many
- 一起谈.NET技术,NHibernate3剖析:Mapping篇之ConfORM实战(1):概览
- NHibernate3剖析:Mapping篇之集合映射基础(3):List映射