お時間をいただきありがとうございます。
私たちは CSLA 3.5.1 を使用していますが、最終的には、この問題は CSLA とはあまり関係がないかもしれません。
私の会社は、よくあるモデリング エラーへの道のりを長い道のりを歩んできましたが、ついにそれに直面しなければなりません。問題を明確にするために、以下のドメイン オブジェクトを簡略化しました。
そのように定義された 3 つのクラスがあります。
クラス Person : ビジネスベース
クラス受講生:人
クラスの先生:人
ORM に NHibernate を使用しており、PersonID を派生キーとして使用して、マッピング (Person、Student、および Teacher テーブルがあります) で Student クラスと Teacher クラスが Person のサブクラスに結合されています。
問題は、ご想像のとおり、学生が教師にもなり得る状況になったことです。現在のオブジェクト モデルとデータ モデルでは、すでに教師である生徒を追加しようとすると、またはその逆の場合に主キー違反が発生します。
質問 1: この状況を防ぐために、新しいレコードを保存する前に、ビジネス オブジェクトに対して実行できる CSLA マジックはありますか?
そうでなければ...
この問題を調査する中で、私はそれを解決するための 2 つの提案を見てきました。1 つ目は、継承よりも構成を優先することです。私の理解では、これは Student と Teacher がそれぞれ Person プロパティを含むことを意味します。
質問 2: これを機能させるには、Student テーブルと Teacher テーブルに Person テーブルへの外部キーが必要であると想定するのは正しいですか? 私はこの解決策を完全には理解していないと思います。何らかのガイダンスが必要です。
2 番目の解決策は、生徒と教師を、特定の人物が果たす役割として考えることです。私が見たところによると、Person クラスには Roles コレクションが必要であり、リンク テーブル (PersonRoles?) を使用して Student テーブルと Teacher テーブルのレコードを Person にマップします。
質問 3: Role 基本クラスと PersonRoles テーブルはどのように見えますか? Student と Teacher のサブクラスには、適切なプロパティだけが含まれていると思います。これは正しいです?
解決策について何か意見はありますか?誰かがウェブ上で肉付けされた例を見つけることができれば、私はそれを見てみたい.
ありがとう、
意思。