次の単純なオブジェクト モデルを確認してください。
- エンティティ
ConcreteThingy
は から派生しAbstractThingy
ます。 - エンティティ
Owner
は最大 1 を持つことができますConcreteThingy
。Owners
同じものは2 つとありませんConcreteThingy
。
EDMX:
DB モデル (TPT):
私が欲しいもの:
優先度の高い順に 2 つのことが必要です。
- 私が欲しいもの #1:何よりも、以下の #2 に対する最も単純で、最も簡潔で、よりクリーンなソリューションが必要です。
- 欲しいもの #2:を削除するときに、関連付けられている可能性のある を base とともに
Owner
自動的に削除したい。ConcreteThingy
AbstractThingy
私がやっていること:
したがって、当然のことながら、私は EDMX に行き、Owner 0 ↔ 0..1 ConcreteThingyアソシエーションでカスケード削除を有効にしました。
FK_ConcreteThingy_Owner
これは、リレーションシップの Delete ルールをCascadeAbstractThingy
に設定することでうまく機能しますが、レコードも確実に削除されるようにする制約/DB コードは見当たりません。
繰り返しますが、 を削除するOwner
と、対応するConcreteThingy
(存在する場合) は削除されますが、ぶら下がっている が残りAbstractThingy
ます。
EF 5 を使用してこの種のタスクを実装する標準的な方法を教えてください。
SQL コードが何らかの方法で私が望むものを推測することを期待して、抽象化してみましたAbstractThingy
(当然のことながら、ジェネレーターにはある種のニワトリと卵の難問がありますが、少なくとも試してみました.)
それとも、EDMX である種のスマートなお尻の参照制約を定義する必要がありますか?
それとも、DB に行って、トリガーなどのように自分でコードを書くことが期待されていますか?!?!? これは、EF とその設計ツールにとっては、ちょっとした大失敗です。
ありがとう。