私はEF5 POCOエンティティを使用しています(違いがある場合は、コードではなくデータベースが最初です)。次の(仮想の)エンティティタイプがあるとします:-
- 店
- 顧客 (StoreId の FK を持つ)
- 製品 (StoreId の FK を持つ)
- 注文 (CustomerId と ProductId の FK を使用)
Store には多くの Customers と Products があり、Order は基本的に Customer と Product の間の MM 結合です。
私の典型的なシナリオでは、Store エンティティとそれに関連するすべての顧客、製品、および注文を取得します。この階層がメモリ内にあるため、ユーザーは UI を介して Customer を削除することを選択できます。このアクションの一環として、顧客の関連する注文も削除したいと考えています。
するだけで十分ですか:-
store.Customers.Remove(customerToDelete);
または、顧客の注文と製品の間の「リンクを解除」する必要もありますか?たとえば:-
foreach (var order in customerToDelete.Orders)
{
order.Product.Orders.Remove(order);
}
変更がすぐに DB に永続化されるとは限らないことに注意してください。ユーザーは、このメモリ内ストア階層で作業を続行し、後で [保存] ボタンをクリックしたときにのみ変更を保持できます。したがって、UI を介してエンティティのこの階層を引き続き「参照」し、特定の製品にドリルダウンする場合、削除された顧客に関連する注文を表示したくありません。したがってforeach
、その顧客の注文の痕跡をすべて消去するには、上記を実行する必要があると思いますか?
それが私の質問に関連しているかどうかはわかりませんが、誰かが「End1 OnDelete」EDMX プロパティが何をするのか説明できますか? SQL でカスケード削除がどのように機能するかは理解していますが、この EDMX カスケード オプションがどこに適合するかわかりませんか?