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各种映射。

  • 相关阅读:
    Swift编码总结4
    Swift编码总结3
    无题
    WebSocket桌面客户端工具
    Dell U2913WM使用感受
    Oracle DB 12c first glance
    [翻译] Oracle Database 12c 新特性Multitenant
    一眨眼oracle 12c也有了
    .Net内存泄露原因及解决办法
    .NET 强引用和弱引用
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/7218778.html
Copyright © 2011-2022 走看看