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する追加の要素とともに子ノードとして追加します。columnbuildingID

<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 に答える