2011-12-20 13 views
0

いいえ。私は構造を持っていると仮定します。エンティティフレームワーク - idで関連レコードを削除します

スクール - >学生 - > StudentParents < - 親 - >アドレス

学校は、多くの学生を持つことができ、学生は親戚ことや両親の同じセットを持つことができます(may-多対多)。各親は複数のアドレスを持つことができます。
同じ親を持つ生徒は、異なる学校で勉強することができないとします。

school_Id = 5が指定されている場合は、この学校と関連するすべてのレコードを削除します。 これをEntity Framework 4で簡単に行う方法は?

+0

[特定のエンティティに関連するすべてのエンティティを削除するにはどうすればよいですか?](http://stackoverflow.com/questions/8557679/how-do-i-delete-all-the-entities-related-特定のエンティティへの) – Eranga

答えて

2

質問はthis questionと同じになります。

間違ったレイヤーで問題を解決しようとしています。 参照整合性をどのように維持しているかをデータベース設計を再考する必要があります。

外部キーの「CASCADE DELETE」を設定し、 をエンティティモデルに反映させる必要があります。データベースは、その エンティティを削除するときに、参照整合性を維持するために必要な変更を に行います。

0

エンティティフレームワークは、メモリ内のオブジェクトとしてインスタンス化されていないデータをデータベースから削除することはできません。つまり、学校のデータ、すべての生徒のデータ、すべての生徒の親データなどをロードする必要があり、すべてのデータを手動で削除する必要があります。

これは多くの作業のように思われるので、この問題の別のアプローチをとってみるといいでしょう。ObjectContextにマップされたデータベースのストアドプロシージャを使用してこのデータをすべて削除してください。すべてのデータをメモリに取り込みます。

しかし、これも面倒なようです。最良の方法は、Cascade deleteをデータベースに作成し、エンティティフレームワークのモデルにもマップすることです。これには2つの利点があります。学校のデータのみを読み込む必要があり、モデルから削除された後はデータベースから削除され、カスケード削除によってすべての参照データが削除されます。しかし、あなたがすでに学校と生徒のデータをメモリに持っているならば、EFはそれらのオブジェクトをメモリから削除済みとしてマークして、データとデータベースの状態を一致させます。

この問題の最適な解決方法は、データベースを変更するかどうかによって異なります。できる場合はcascade deleteに行ってください。もしあなたができないのであれば、私はstored procedureの方がパフォーマンスが良いと勧めています(パフォーマンスは問題だと思いますし、データベースにはたくさんの学生、両親などがいます)。

関連する問題