天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

NHibernate3剖析:Mapping篇之ConfORM實戰(2):原理

  ConfORM概述

  在上一節中,我用一個簡單的例子描述了ConfORM簡單使用。留下了很多疑問,大家不解為何使用ConfORM以及怎么使用ConfORM,其內部原理是什么。這節,我們先注重了解一些ConfORM的原理。

  你可以到http://code.google.com/p/codeconform/ 獲取ConfORM

  ConfORM重要接口

  ConfORM的核心就是實例化一個ObjectRelationalMapper對象和Mapper對象,配置Domain對象,調用Mapper對象的CompileMappingFor()方法生成HbmMapping。即上一節中我們所寫的:

//Code Snippets Copyright http://lyj.cnblogs.com/
public static HbmMapping GetMapping()
{
//初始化ObjectRelationalMapper類
var orm = new ObjectRelationalMapper();
//配置Domain為TablePerClass
orm.TablePerClass<Domain>();
//在這里可以調用ObjectRelationalMapper類一些方法配置Domain語義
//使用orm參數初始化Mapper類
var mapper = new Mapper(orm);
//在這里可以調用Mapper類一些方法配置Domain的Mapping
//調用Mapper類的CompileMappingFor方法編譯生成HbmMapping對象
return mapper.CompileMappingFor(new[] { typeof(Domain) });
}

  在了解這段代碼之前,先看看ConfORM的重要接口:

  IDomainInspector接口

  IDomainInspector接口用來描述我們的領域模型,按照ORM術語定義。是ConfORM的切入點,同時也是Mapping類的驅動。由ObjectRelationalMapper類實現這個接口。

IDomainInspector  IObjectRelationalMapper接口

  首先回顧下一些ORM術語:

  面向對象的三種繼承策略:

  • TablePerClass:每個類一張表映射策略
  • TablePerClassHierarchy:每個類分層結構一張表映射策略
  • TablePerConcreteClass:每個具體類一張表映射策略

  在Entity模型屬性中,主要有主鍵屬性、持久化屬性、非持久化屬性。IObjectRelationalMapper接口使用ORM術語來描述Domain模型,包含了三種繼承策略和Entity模型的各種屬性設置方法:

  • 主鍵(Poid):每個實體都有自己的狀態和生命周期,在數據庫中的記錄需要一個主鍵來識別。
  • 持久化屬性:一般有基本屬性,還有版本號屬性(VersionProperty)、NaturalId屬性、各種集合屬性(Set、Bag、List、Array、Dictionary、Complex、HeterogeneousAssociation)、各種關聯關系屬性(ManyToMany、ManyToOne、ONEToOne)。
  • 非持久化屬性:不是所有的Domain、屬性都需要做持久化,當我們不需要映射類或者屬性時可以使用Exclude、ExcludeProperty排除。

  另外附加一個關聯集合的級聯方法:Cascade

IObjectRelationalMapper  IExplicitDeclarationsHolder接口

  顯式聲明Domain語義接口,使用IObjectRelationalMapper接口方法顯式聲明自定義Domain語義,ConfORM會添加到相應集合中。

IExplicitDeclarationsHolder  IPatternsHolder接口

  用于隱式聲明Domain語義接口,主要原理是其默認實現類(DefaultNHibernatePatternsHolder類)中在各個集合里默認定義了相匹配的模式供我們來匹配其成員。

IPatternsHolder  例如:實體主鍵Poid默認使用PoIdPattern:如果實體成員的名稱是"id"或者"poid"或者"oid"(不區分大小寫)的話,就認為是實體的主鍵。

  ObjectRelationalMapper類

  ObjectRelationalMapper類實現IDomainInspector接口和IObjectRelationalMapper接口。IObjectRelationalMapper接口實現方法:用于把自定義的Domain語義配置到IExplicitDeclarationsHolder接口的相應集合中。IDomainInspector接口實現方法:用于驗證Domain語義,它從兩種角度去驗證Domain語義:

  • 其一是在IExplicitDeclarationsHolder接口默認實現(ExplicitDeclarationsHolder類)中相關集合中顯式匹配。
  • 其二是在IPatternsHolder接口的默認實現(DefaultNHibernatePatternsHolder類)中相關集合中隱式匹配。

  Mapping類

  Mapping類是ObjectRelationalMapper和NHibernate映射的橋梁。在ConfOrm.NH命名空間下,Mapping類通過IDomainInspector接口來分析Domain模型語義,我們通過CompileMappingFor()方法或者CompileMappingForEach()方法根據這些語義把程序中的Domain模型編譯并轉換為NHibernate使用的HbmMapping對象。

Mapper  ConfORM重要模式

  Mapping類除了CompileMappingFor()、CompileMappingForEach()方法之外,還為我們引入了三個重要模式,分別為:模式適配器(pattern-applier)模式、通用定制化(generic-customizer)模式、特定定制化(specific-customizer)模式。

  模式適配器(pattern-applier)

  模式適配器(pattern-applier),顧名思義,就是Domain模型按模式匹配,如果符合這個模式就進行相應操作。ConfORM默認提供了很多pattern-applier(即DefaultPatternsAppliersHolder類)。我們可以通過Mapping類的PatternsAppliers屬性查看。也可以通過AddXXXPattern()方法增加模式適配器(pattern-applier)。

  通用定制化(generic-customizer)

  通用定制化(generic-customizer),就是指對通用的類型實現定制化。 我們不需要準確的知道這個類型的真實映射。如果要定制化一個類,我們不需要知道這個類最終被映射為class,subclass,joined-subclass,union-subclass還是component,只是把這個類設置一些屬性。同理,你定制化一個集合不需要知道這個集合將映射為bag,set,array,list還是map(dictionary)。通用定制化由Mapping類的Customize()方法提供。

  特定定制化(specific-customizer)

  特定定制化(specific-customizer),就是對特定的類或者集合實現定制化。與通用定制化恰恰相反,我們對特定的類或者特定的某個集合設置一些定制化屬性,這個定制化僅對當前你定制的對象有用。

特定定制化由Mapping類的Class()、Subclass()、JoinedSubclass()、UnionSubclass()、Component()方法提供。

  結語

  這篇文章了解一些ConfORM的原理,以后的文章都是以這篇文章為基礎展示ConfORM各種應用

  參考資料

  Fabio Maulo:ConfORM: NHibernate un-Mapping

NET技術NHibernate3剖析:Mapping篇之ConfORM實戰(2):原理,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 拔擦拔擦8X永久华人免费播放器 | 北条麻妃夫の友人196 | 一级毛片免费视频网站 | 公粗挺进了我的密道在线播放贝壳 | 午夜福利不卡片在线播放免费 | 日韩人妻少妇一区二区三区 | 嫩交18xxxx| 国产精品亚欧美一区二区三区 | 欧美亚洲视频在线二区 | 色即是空 BT | 97精品一区二区视频在线观看 | 久久久久久久久久毛片精品美女 | 永久精品免费影院在线观看网站 | 国产强奷糟蹋漂亮邻居在线观看 | 亚洲精品国产拍在线观看 | 牲高潮99爽久久久久777 | 视频三区 国产盗摄 | 动漫在线观看免费肉肉 | 亚洲幼女网 | 成人毛片手机版免费看 | 亚洲综合无码一区二区 | 最新精品国产 | 很很射影院 | 国产午夜一区二区三区免费视频 | 麻豆Av国产在线播放 | 蜜桃狠狠色伊人亚洲综合网站 | 村妇偷人内射高潮迭起 | 欧美黑人巨大xxxxx | 久久综合狠狠综合狠狠 | 且试天下芒果免费观看 | 野花韩国中文版免费观看 | 国产成人无码AV麻豆 | 毛片在线网址 | 久久9精品区-无套内射无码 | 精品无码三级在线观看视频 | 中字幕视频在线永久在线观看免费 | 成人国产精品玖玖热色欲 | 成年人视频在线观看免费 | 三级网址在线观看 | 18岁男人女人插孔 | 性刺激欧美三级在线现看中文 |