1

我需要一个手工绘制一个集合。

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

我的推理正确吗?

4

1 回答 1

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

于 2009-02-03T07:50:34.297 回答