NHibernate Bag Mapping

时间:2009-02-03 07:09:28

标签: sql-server nhibernate mapping

我需要手绘一个集合。

我正在使用连接表来保存对房间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;

任何提示/帮助都非常感激。

推理:

如果我将joinID添加到连接表,那么房间永远不会改变建筑物; 我会从像

这样的东西中减少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 个答案:

答案 0 :(得分:1)

column元素中删除many-to-many属性,并将其添加为子节点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进行查询。