1

次の単純なオブジェクト モデルを確認してください。

  • エンティティConcreteThingyは から派生しAbstractThingyます。
  • エンティティOwnerは最大 1 を持つことができますConcreteThingy
    • Owners同じものは2 つとありませんConcreteThingy

EDMX:

ここに画像の説明を入力

DB モデル (TPT):

ここに画像の説明を入力

私が欲しいもの:

優先度の高い順に 2 つのことが必要です。

  • 私が欲しいもの #1:何よりも、以下の #2 に対する最も単純で、最も簡潔で、よりクリーンなソリューションが必要です。
  • 欲しいもの #2:を削除するときに、関連付けられている可能性のある を base とともにOwner自動的に削除したいConcreteThingyAbstractThingy

私がやっていること:

したがって、当然のことながら、私は EDMX に行き、Owner 0 ↔ 0..1 ConcreteThingyアソシエーションでカスケード削除を有効にしました。

ここに画像の説明を入力

FK_ConcreteThingy_Ownerこれは、リレーションシップの Delete ルールをCascadeAbstractThingyに設定することでうまく機能しますが、レコードも確実に削除されるようにする制約/DB コードは見当たりません。

ここに画像の説明を入力

繰り返しますが、 を削除するOwnerと、対応するConcreteThingy(存在する場合) は削除されますが、ぶら下がっている が残りAbstractThingyます。

EF 5 を使用してこの種のタスクを実装する標準的な方法を教えてください。

SQL コードが何らかの方法で私が望むものを推測することを期待して、抽象化してみましたAbstractThingy(当然のことながら、ジェネレーターにはある種のニワトリと卵の難問がありますが、少なくとも試してみました.)

それとも、EDMX である種のスマートなお尻の参照制約を定義する必要がありますか?

それとも、DB に行って、トリガーなどのように自分でコードを書くことが期待されていますか?!?!? これは、EF とその設計ツールにとっては、ちょっとした大失敗です。

ありがとう。

4

0 に答える 0