天天看點

一起談.NET技術,NHibernate3剖析:Mapping篇之ConfORM實戰(3):OneToOne語義  ConfORM概述  One-to-One語義  結語  參考資料

  在Domain設計中,關聯關系有單向關聯和雙向關聯兩種,那麼一對一我們可以分為單向一對一關聯(Unidirectional one-to-one)、雙向一對一主鍵關聯(Bidirectional one-to-one (primary key association))、雙向一對一外鍵關聯(Bidirectional one-to-one (foreign key association))三種情況。這篇使用ConfORM“映射”這些Domain執行個體吧。

  我們使用ObjectRelationalMapper類中的OneToOne方法定義兩個對象一對一關系。

  1.Domain

  設計單向一對一關聯Domain執行個體,Person對象和Address對象,人有一個位址。

  2.ConfORM

  使用ConfORM來配置Domain,使之編譯生成我們需要的HbmMapping對象。(注意黑體)

  3.Mapping

一起談.NET技術,NHibernate3剖析:Mapping篇之ConfORM實戰(3):OneToOne語義  ConfORM概述  One-to-One語義  結語  參考資料

  對于單向一對一關聯,實際就是設定IManyToOneMapper,ConfORM會在IPatternsAppliersHolder的ManyToOne和ManyToOnePath集合中比對對應模式擴充卡,即比對UnidirectionalOneToOneUniqueCascadeApplier模式擴充卡,進行相應操作。

  UnidirectionalOneToOneUniqueCascadeApplier:應用IManyToOneMapper.Unique(true)和ManyToOneMapper.Cascade(applyCascade.HasValue?applyCascade.Value : Cascade.All)。

  設計雙向一對一關聯Domain執行個體,Person對象和Address對象,人有一個位址,位址有一個人。

  使用ConfORM來配置Domain,使之編譯生成我們需要的HbmMapping對象。其實這個代碼和上面的一樣:

  測試生成字元串:

一起談.NET技術,NHibernate3剖析:Mapping篇之ConfORM實戰(3):OneToOne語義  ConfORM概述  One-to-One語義  結語  參考資料

  對于雙向一對一關聯,實際就是設定IOneToOneMapper,ConfORM會在IPatternsAppliersHolder的OneToOne和OneToOnePath集合中比對對應模式擴充卡,即比對到以下三個模式擴充卡,進行相應操作。

  BidirectionalPrimaryKeyAssociationMasterOneToOneApplier:應用IOneToOneMapper.Cascade(Cascade.All)

  BidirectionalOneToOneAssociationPoidApplier:應用IIdMapper.Generator(Generators.Foreign(BidirectionalOneToOneOrNull(subject.ReflectedType)))

  BidirectionalPrimaryKeyAssociationSlaveOneToOneApplier:應用IOneToOneMapper.Constrained(true)

  Domain與雙向一對一主鍵關聯(Bidirectional one-to-one (primary key association))相同。

  配置Domain,注意黑體:

一起談.NET技術,NHibernate3剖析:Mapping篇之ConfORM實戰(3):OneToOne語義  ConfORM概述  One-to-One語義  結語  參考資料

  類似的,比對到以下模式擴充卡:

  BidirectionalForeignKeyAssociationManyToOneApplier:應用IManyToOneMapper.Unique(true)和IManyToOneMapper.Cascade(Cascade.All)

  BidirectionalForeignKeyAssociationOneToOneApplier:應用IOneToOneMapper.PropertyReference(GetPropertyOf(manyToOneSideType, oneToOneSideType))

  BidirectionalPrimaryKeyAssociationMasterOneToOneApplier:應用IOneToOneMapper..Cascade(Cascade.All)

  這篇文章展示ConfORM的One-to-One語義應用,映射了三種One-to-One映射。

繼續閱讀