2011-11-25 72 views

回答

8

NHibernate的文檔描述瞭如何使用和映射composite-id。您可以使用component as compositeid

而對於功能NHibernate:

public class ClassNameMap: ClassMap<ClassName> 
{ 
    public ClassNameMap() 
    { 
     CompositeId(). 
      .KeyReference(x => x.A, "A") 
      .KeyReference(x => x.B, "B"); 
    } 
} 
+0

參考不再工作。最好在這裏複製答案,並由引用支持,而不僅僅是使用參考。 –

1

嘗試一下本作NHibernate的...

<composite-id name="Key" class="KeyClass"> 
    <key-many-to-one name="first" column="firstColoumn" lazy="proxy" class="FirstClass"> 
    <key-many-to-one name="second" column="secondColoumn" lazy="proxy" class="secondClass"/> 
</composite-id> 

和流暢冬眠

<composite-id> 
     <key-property type="Int32" name="first" column="firstColoumn" /> 
     <key-property type="Int32" name="second" column="secondColoumn" /> 
    </composite-id> 

希望幫助你... :-)

+5

咦?第二個不是一個流利的映射... –

4

對於NHibernate的複合主鍵我會建議;

對於的hbm.xml:

<hibernate-mapping> 
<class table="TableName" name="Namespace.ClassName, ClassName"> 
<composite-id> 
    <key-property name="IdPropertyOne" column="ColumnOne" /> 
    <key-property name="IdPropertyTwo" column="ColumnTwo" /> 
</composite-id> 
<property name="PropertyName" column="ColumnName" type="String"></property> 
</class> 
</hibernate-mapping> 

然後你應該重寫的Equals的GetHashCode方法,讓NHibernate的知道如何比較新的密鑰和識別不同的物體。這取決於你願意走多遠,你還可以通過使用「密鑰 - 多對一」映射外鍵。

對於鍵多到一個:

<key-many-to-one name="PropertyOneObjName" column="ColumnOne" class="PropertyOneClassName"> 

對於流利的休眠複合鍵的樣子:

public ClassName(){ 
    CompositeId(). 
     KeyProperty(x => x.IdPropertyOne,"ColumnOne") 
     KeyProperty(x => x.IdPropertyTwo,"ColumnTwo") 
} 
相關問題