zoukankan      html  css  js  c++  java
  • NHibernate剖析:Mapping篇之Mapping-By-Code(1):概览

    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示意图例如以下:

    nh3-mapping-path

    ModelMapper架构

    ModelMapper核心是配置领域模型映射,编译并转换为HbmMapping对象。依照其功能ModelMapper类有四个部分。各自是:

    • 特定映射(Specific Mapper)
    • Conformist映射(Conformist Mapping)
    • 事件拦截器(Events Interceptor)
    • 编译映射(CompileMapping)

    特定映射(Specific Mapper)

    特定映射(Specific Mapper)。对特定的类或者特定的某个组件设置定制化映射。由Class、Subclass、JoinedSubclass、UnionSubclass、Component方法提供。

    ModelMapper-SpecificMapper

    Conformist映射(Conformist Mapping)

    Conformist映射(Conformist Mapping)是以Class-By-Class方式映射。然后增加ModelMapper类。

    ModelMapper-AddMapping

    事件拦截器(Events Interceptor)

    在每种映射行为前后,都定义了事件拦截器,能够通过事件拦截器定义约束。从设计角度上看是对ModelMapper类提供了扩展性。

    ModelMapper-Events

    编译映射(CompileMapping)

    把程序中的领域实体的映射编译并转换为NHibernate使用的HbmMapping对象。CompileMappingFor、CompileMappingForEach方法指定特定领域实体,CompileMappingForAllExplicitAddedEntities和CompileMappingForEachExplicitAddedEntity方法已经显式指定提供映射的实体。

    ModelMapper-CompileMapping

    结语

    这篇文章首先了解NHibernate3.2新增的Mapping-By-Code(代码映射)的原理,兴许的文章以这篇文章为基础学习Mapping-By-Code各种映射。

  • 相关阅读:
    pat甲级 1155 Heap Paths (30 分)
    pat甲级 1152 Google Recruitment (20 分)
    蓝桥杯 基础练习 特殊回文数
    蓝桥杯 基础练习 十进制转十六进制
    蓝桥杯 基础练习 十六进制转十进制
    蓝桥杯 基础练习 十六进制转八进制
    51nod 1347 旋转字符串
    蓝桥杯 入门训练 圆的面积
    蓝桥杯 入门训练 Fibonacci数列
    链表相关
  • 原文地址:https://www.cnblogs.com/lytwajue/p/7218779.html
Copyright © 2011-2022 走看看