2009-02-03 186 views
1

我需要一個手工映射集合。NHibernate包映射

我正在使用連接表來保存對房間ID和CALEvent ID的引用。 但是,外觀將主要基於房間的buildingID - 所以我想將buildingID添加到以下映射中。有誰知道如何去做?

我查看了NHibernate文檔,但找不到任何東西。

<bag name="rooms" table="tb_calEvent_rooms" lazy="false"> 
    <key column="calEventID"/> 
    <many-to-many class="BasicRoom" column="roomID"/> 
</bag> 

類:

public class BasicRoom 
{ 
    private long _id; 
    private long _buildingID; 
    private string _roomName; 

任何提示/幫助非常感謝。

推理:

一個房間永遠不會改變的建築,所以如果我添加buildingID的連接表; 我會減少select語句的複雜性,從類似 -

SELECT * 
FROM 
    dbo.tb_calEvent_rooms 
    INNER JOIN dbo.tb_calEvents ON (dbo.tb_calEvent_rooms.calEventID = dbo.tb_calEvents.id) 
    INNER JOIN dbo.tb_rooms ON (dbo.tb_calEvent_rooms.roomID = dbo.tb_rooms.id) 
    INNER JOIN dbo.tb_buildings ON (dbo.tb_rooms.buildingID = dbo.tb_buildings.id) 
WHERE 
    dbo.tb_buildings.id = 54 

SELECT * 
FROM 
    dbo.tb_calEvents 
    INNER JOIN dbo.tb_calEvent_rooms ON (dbo.tb_calEvents.id = dbo.tb_calEvent_rooms.calEventID), 
    dbo.tb_buildings 
WHERE 
    dbo.tb_buildings.id = 54 

是我的推理是否正確?

回答

1

many-to-many元素中取出column屬性並將其添加爲一個子節點INSEAD,旁邊一個額外column元素引用buildingID

<bag name="rooms" table="tb_calEvent_rooms" lazy="false"> 
    <key column="calEventID"/> 
    <many-to-many class="BasicRoom"> 
    <column name="roomID"/> 
    <column name="buildingID"/> 
    </many-to-many> 
</bag> 

這應該使您能夠查詢基礎上,buildingID以及roomID

+0

感謝此, 雖然我收到以下錯誤。 faultString =「外鍵(FK3EDE57A96B977B0C:tb_calEvent_rooms [roomID,buildingID]))必須與引用的主鍵(tb_rooms [id])具有相同的列數」 我想房間或建築物映射不正確。嗯,.. – user17510 2009-02-03 08:39:20