我有一個2列作爲PK(複合主鍵)的表。我如何映射一個n列主鍵與nHibernate
如何將它們映射到hbm.xml
中的「Id」?
<id name="A" />
如何用流利的nhibernate做到這一點?
我有一個2列作爲PK(複合主鍵)的表。我如何映射一個n列主鍵與nHibernate
如何將它們映射到hbm.xml
中的「Id」?
<id name="A" />
如何用流利的nhibernate做到這一點?
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");
}
}
嘗試一下本作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>
希望幫助你... :-)
咦?第二個不是一個流利的映射... –
對於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")
}
參考不再工作。最好在這裏複製答案,並由引用支持,而不僅僅是使用參考。 –