2

私は2つのテーブルを持っています:

CalendarEntry
  Id
  Date
  ...

Holiday
  Id
  Date
  ...

私のCalendarEntryクラスでは、このようなプロパティがあります

public ISet<Holiday> Holidays { ... }

と同じHoliday場所で発生するインスタンスに関連付けたいと思います。しかし、私はこれを行う方法を思い付くことができません。DateCalendarEntry

私はそれを1対多としてマッピングしようとしましたが、1対多は、CalendarEntryId列を使用して結合を実行する必要があると自動的に想定します(おそらく、一意であることが保証されている唯一のプロパティであるため、そうでなければなりません1 対多であること)。

多対多としてマッピングしようとしましたが、多対多には別の結合テーブルが必要なようです。この場合は望ましくありません。

私の質問は次のとおりです:これをNHibernateでマップすることは可能ですか?どうすればよいですか? それが不可能なら、なぜですか?

4

3 に答える 3

1

これは、NHibernate2.1で利用できると私が信じているproperty-refを使用して実行できるはずです。リンクテキストで見つけました。NHibernateに追加するためのjiraです。

これが日付列で機能するかどうかはわかりません。日付フィールドに時間データが含まれている場合は、間違いなく運が悪いです。

いつでも関係をモデルから除外し、リポジトリメソッド、つまりGetHolidaysForDateを介してコレクションにアクセスできます。休日はカレンダーのエントリや文化に固有のものとは異なるため、これは私にとってより理にかなっています。「休暇」に相当する米国以外の意味を使用している場合を除きます。

于 2010-01-11T16:55:30.860 に答える
1

休日のエントリを取得するためのクエリを設定する必要があると思います。これがマッピングを使用して実行できるかどうかはわかりません。


適用されない可能性がある私の元の回答からの追加情報: 結合テーブル エントリ用に別のエンティティ クラスを作成しなくても、NHibernate で多対多の関係を持つことができますが、基になるデータはデータベースのどこかに存在する必要があります。

于 2010-01-11T16:40:32.747 に答える
0

CalendarEntryとからの適切な ID を含むデータベース ビュー (または派生テーブル クエリ) を作成Holidayし、ビューを使用して多対多の関係をマップすることができます。 .

inverse="true"NHibernate がコレクション (おそらくとの組み合わせ) を更新しようとしないことを確認cascade="none"し、コードでそれらを変更しないようにする必要があります。テーブルがまったく必要ない場合は、これで問題ないと思います。

于 2010-01-12T04:28:02.530 に答える