簡體   English   中英

如何使用接口映射composite-id和流暢的nhibernate?

[英]How to map composite-id with fluent nhibernate using an interface?

我正在嘗試將.hbm映射切換為流暢的映射,並且復合ID的映射和接口的使用存在問題

該類看起來如下:

public class ClassWithCompositeId {
  public virtual IKeyOne KeyOne { get; set; }
  public virtual IKeyTwo KeyTwo { get; set; }
}

我們的hbm映射看起來像這樣:

<hibernate-mapping ...>
   <class name="ClassWithCompositeId" table="t_classwithcompositeid">
      <composite-id>      
         <key-many-to-one name="KeyOne" column="colkeyone" class="company.namespace.boSkillBase, BL_Stammdaten" />
         <key-many-to-one name="KeyTwo" column="colkeytwo" class="boQualifikation" />         
      </composite-id>
</hibernate-mapping>

請注意,我們在課堂上有接口! 不,我試圖用流利的nhibernate來映射它。

Map {
   public ClassWithCompositeIdMap() {
         CompositeId()
            .KeyReference(x => x.KeyOne, "colkeyone")
            .KeyReference(x => x.KeyTwo, "colkeytwo");
          ...
   }
}

但是現在Fluent生成Mapping如下:

...
 <composite-id mapped="false" unsaved-value="undefined">
      <key-many-to-one name="KeyOne" class="company.namespace.IKeyOne, Interfaces, Version=0.1.4.3379, Culture=neutral, PublicKeyToken=null">
        <column name="colkeyone" />
      </key-many-to-one>
      <key-many-to-one name="KeyTwo" class="company.namespace.IKeyTwo, Interfaces, Version=0.1.4.3379, Culture=neutral, PublicKeyToken=null">
        <column name="colkeytwo" />
      </key-many-to-one>
    </composite-id>
...

“類”屬性現在指向接口,而不是此接口的實現,這會導致錯誤。

如何告訴Fluent nHibernate使用另一個類作為屬性值?

嘗試從SourceForge下載NhGen 它讀取數據庫模式並生成Fluent映射和類等。雖然所有代碼可能都不是您需要的,但它應該以正確的方向啟動您,因為它支持復合鍵並將它們表示為主實體之外的單獨類。

我相信它使用類似的語法

 CompositeId()
            .ComponentCompositeIdentifier(x => x.Key, "Namespace.Key, Assembly")
            .KeyProperty(x => x.Key.Id1, "Id1")
            .KeyProperty(x => x.Key.Id2, "Id2")
            .KeyProperty(x => x.Key.Id3, "Id3");

坦克! 但我已經找到了答案。 事實上,我發現流利的nHibernate缺少一個功能。 該功能已被Paul Batum添加到dev分支中。

你會像這樣使用它:

   Map {
      public ClassWithCompositeIdMap() {
            CompositeId()
               .KeyReference(x => x.KeyOne, k =>
                   k.Type<KeyOneImplementation>(), "colkeyone")
               .KeyReference(x => x.KeyTwo, k =>
                   k.Type<KeyTwoImplementation>(), "colkeytwo");
             ...
      }
   }

http://github.com/paulbatum/fluent-nhibernate/tree/dev

您可以在此處查看原始對話: http//support.fluentnhibernate.org/discussions/help/349-how-to-map-a-composite-id-when-using-interfaces-or-how-to-change-該級的屬性,在最關鍵的,多到一個標簽

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM