私は、EFコードファーストとDDDの原則を学ぶ手段としてロッカーレンタルを追跡する簡単なモデルを用意しています。モデルには次の要件があります。シンプルモデルによる削除エラーのコードファーストとカスケード
- 多くの組織(学校、大学など)があります。
- 各組織には多くのロッカーと多くのレンタル期間があります。
- ユニークなロッカーとレンタル期間のペアごとに、複数のレンタルが可能です(つまり、1つの学期に複数の異なるロッカーにレンタルできます)。
モデルは次のように設定され:
機関は、2つのコレクションを保持しています。 1つはロッカーのコレクションを保持し、もう1つはレンタル期間のコレクションを保持する。ロッカーとレンタル期間は、DDDの伝統を維持するために、親組織への参照を保持していませんが、両方とも親組織に必要な外部キーを含んでいます。ロッカーとレンタル期間には両方ともレンタルのコレクションが含まれています。レンタルには、ロッカーへの必要な外部キーと、レンタル期間に必要な外部キーがあります。下の画像は、私のモデルがどのように見えるかをよく表しています。
組織がカスケード削除でモデル化されているため、組織が削除されると、関連するすべてのロッカーとレンタル期間が削除されるため、これが行われます。しかし、ロッカーとレンタル期間をカスケード削除でモデル化して、ロッカーが削除された場合、関連するすべてのレンタルも削除されるようにすることは理にかなっています。レンタル期間も同様です。私がそれを設定すると、サイクルや複数のカスケード・パスが作成される可能性があるため、EFは私にはできないことを伝えます。しかし、私はいずれかの関係(いずれかを問わない)を取ってカスケード削除をオフにすると、データベースを作成するよりもうまくいく。私はそれが複数のカスケード経路問題を修正すると想像しています。
このモデルでは削除カスケードが機能しないため、問題がモデル化されている可能性があります。私はこれについてかなり長い間考えていました。カスケード削除でこの問題をモデル化する方法は思い付きません。
以下のテストプロジェクト(Visual Studio 2010ソリューション)を含めました。変更する必要があるのは、App.configの接続文字列だけです。 EFコードファーストとDDDの原則を学び始めたばかりなので、私はすべての提案について開いています。
http://www.mediafire.com/?kj3rrg433bq8i5g
ありがとうございました、私はトリガーを見て、私が望むものである「削除の代わりに」トリガーのいくつかの例を見つけることができました。私はちょうどロッカー/レンタルとレンタル期間/レンタルの間のカスケード削除を取っていくつかのトリガーを挿入することができますが、組織/ロッカーと組織/レンタル期間のカスケード削除のために不可能です。カスケード削除のツリー全体がトリガーになる必要があるようです...可能であれば、他の唯一の幸運な部分はEFでこれをやっています。 –