2012-03-15 13 views
0

[OK]を他のユーザーはuserFavouriteに行を追加します。今私は、UserIdとOtherUserIdの両方の列と、2つの外部キー制約を持つUserテーブルの間で参照整合性を持っています。NHibernateの設計および複合キー

私の質問は、NHibernateを介してこれにアクセスするためのベストプラクティスですか?基本的なGet <>メソッドでは、ID列であるIDが使用されます。この場合、テーブルのユニークな識別特性はUserIdとOtherUserIdの複合キーであるため、複合キーを持つべきだと私は思っています。私はどこにでも彼らが悪いと読んで、DBが正しく設計されていれば、私はそれらを使うべきではありません。

だから、私はDBを設計できるかそうでないと考えて、私は

UserFavourite(一意ID、ユーザーID、OtherUserId、AddDate)

を持ち、ユニークID取得のためのPKとID作ることができると仮定しますメソッドを呼び出し、UserId/OtherUserId列にユニーク制約を設定します。しかし、これは私の問題を解決しません、私はコードを介して行を削除するか、それを得るために、私はまだUniqueIDを渡す必要がありますが、私はアクセスできません。

"あなたのお気に入りからこのユーザー(ユーザーID 142)を削除してください"と言うことができます。だから、私はUserIdと自分のUserIdにしかアクセスできないので、何とか私は一意のIDではなく、それらの2つのIDを使ってNHibernateクエリを実行できる必要があります。

NHibernateで理想的な方法でこのケースをどのように扱うべきか指摘できますので、コンポジットキーを使用せずにこれらのクエリを簡単かつ効率的に行うことができますか?純粋な関係テーブルについては

答えて

0

、あなたは多対多マッピングのために行っている可能性(NHibernate Many-to-manyを参照)

あなたの関係テーブルがAddDate(後で多分もっと)としてデータを保持して考えると、私はあなたが行くべきだと思いますUniqueIDの場合は、コレクションマッピングを持つ

  • UserクラスからUserFavouriteクラスへのinverse = "true"の2つの一対多の2つがあります。
  • おそらくUserFavouriteを削除するためのユニークIDを使用することは決してないだろうユーザークラスにごUserFavouriteクラスから多対一

。現在のユーザのUserFavouriteの中から目的のUserFavouriteをフィルタリングして削除します。

あなたは頻繁にAddDateを使用しません。私は、更新(カスケード、保存、更新、削除)に関連する正しいマッピング属性で、2つのメソッド(多対多+リレーションシップマッピング)を組み合わせることができると思います。

+0

ユーザークラスの2つの1対多のマッピングについて少し混乱していますが、これでサンプルマッピングを投稿できますか?私はUserIdプロパティを宣言し、その同じプロパティのファイルに2つの別々のマッピングを持っていることをどうにかしていません。 UniqueIdを削除に使用することはおそらくないと言いますが、それ以外はどうすれば削除できますか?私はセッションオブジェクトを使用して削除する唯一の方法は、IDと思った? – NZJames

関連する問題