我有多對多的關係。Nhibernate多對多:3桌hbm mapping
表A,表B和表AB。 表AB將包括2列,A_Id和B_id .. 主鍵需要來自兩個列。
許多B記錄可以引用一個A記錄。但是對於B中的每條記錄,只有一個A記錄是變異的
什麼是HBM和POCO類中的正確語法?
預先感謝
我有多對多的關係。Nhibernate多對多:3桌hbm mapping
表A,表B和表AB。 表AB將包括2列,A_Id和B_id .. 主鍵需要來自兩個列。
許多B記錄可以引用一個A記錄。但是對於B中的每條記錄,只有一個A記錄是變異的
什麼是HBM和POCO類中的正確語法?
預先感謝
這是一個基於相當明顯的例子,在文檔中的一個例子:23.2. Author/Work
<class name="A" table="A" >
<id name="Id" column="A_Id" generator="native" />
<bag name="Bs" table="AB" lazy="true">
<key column="A_Id">
<many-to-many class="B" column="B_Id" not-null="true" />
</bag>
...
</class>
<class name="B" table="B" >
<id name="Id" column="B_Id" generator="native" />
<bag name="As" table="AB" lazy="true" inverse="true">
<key column="B_Id">
<many-to-many class="A" column="A_Id" not-null="true" />
</bag>
...
</class>
,這將是在C#中的類
public class A
{
public virtual int Id { get; set; }
public virtual IList<B> Bs { get; set; }
}
public class B
{
public virtual int Id { get; set; }
public virtual IList<A> As { get; set; }
}
表AB在這裏是隱式映射的......沒有明確的配對對象AB
但我自己的首選方法是用AB_ID替代關鍵字擴展表AB,並將其映射爲標準對象。如果你喜歡閱讀更多關於明確的配對對象映射實體:
更新相關評論認爲B能有隻有一個
在這種情況下,我們不需要AB表。在B應該有列A_ID,表達RELA參考:
<class name="A" table="A" >
<id name="Id" column="A_Id" generator="native" />
<bag name="Bs" table="B" lazy="true">
<key column="A_Id">
<!-- not MANY but ONE-TO-Many -->
<one-to-many class="B" />
</bag>
...
</class>
<class name="B" table="B" >
<id name="Id" column="B_Id" generator="native" />
<many-to-one name="A" column="A_Id" />
...
</class>
的實體
// This class is the same
public class A
{
public virtual int Id { get; set; }
public virtual IList<B> Bs { get; set; }
}
// here just a reference
public class B
{
public virtual int Id { get; set; }
public virtual A A { get; set; }
}
的事情是,它要麼是many-to-many
和表AB到位 - 與否。沒有什麼我會說
你可以使用CompositeId從多個cols聲明ID(例如:http://www.codeproject.com/Tips/419780/NHibernate-Mappings-for-Composite-Keys-with- Associ) –
我不想使用複合id作爲表格。因爲我使用Id作爲其他表的關係。 – Shir