エンティティフレームワークは、メモリ内のオブジェクトとしてインスタンス化されていないデータをデータベースから削除することはできません。つまり、学校のデータ、すべての生徒のデータ、すべての生徒の親データなどをロードする必要があり、すべてのデータを手動で削除する必要があります。
これは多くの作業のように思われるので、この問題の別のアプローチをとってみるといいでしょう。ObjectContext
にマップされたデータベースのストアドプロシージャを使用してこのデータをすべて削除してください。すべてのデータをメモリに取り込みます。
しかし、これも面倒なようです。最良の方法は、Cascade delete
をデータベースに作成し、エンティティフレームワークのモデルにもマップすることです。これには2つの利点があります。学校のデータのみを読み込む必要があり、モデルから削除された後はデータベースから削除され、カスケード削除によってすべての参照データが削除されます。しかし、あなたがすでに学校と生徒のデータをメモリに持っているならば、EF
はそれらのオブジェクトをメモリから削除済みとしてマークして、データとデータベースの状態を一致させます。
この問題の最適な解決方法は、データベースを変更するかどうかによって異なります。できる場合はcascade delete
に行ってください。もしあなたができないのであれば、私はstored procedure
の方がパフォーマンスが良いと勧めています(パフォーマンスは問題だと思いますし、データベースにはたくさんの学生、両親などがいます)。
[特定のエンティティに関連するすべてのエンティティを削除するにはどうすればよいですか?](http://stackoverflow.com/questions/8557679/how-do-i-delete-all-the-entities-related-特定のエンティティへの) – Eranga