私はEntity FrameworkをデフォルトのASP.NET Membershipサービスと共に使用しています。私はまた、 "プロファイル情報"の3番目のテーブルを持っています。私はEFが内部的にすべてを処理すると思ったが、そうはしなかった。 http://localhost:19506/User/Delete/SomeGUIDhere
のようなURLにアクセスしてユーザーを削除しようとすると、外来キーの制約が存在するという事実に関連した厄介なエラーが発生します。「ユーザー」に関連するすべてのレコードを削除するにはどうすればよいですか?
これらの種類の依存関係はどのように管理できますか? EFの目的を破るようなことをすべて追跡する必要があるので、私は何かマイナーなことを逃していると思っています。
編集私はそれが動作しているいくつかのコードを含める。私はまだ私が以下のものよりも良い方法があるかどうかを知りたい。それは、外来のキーの依存関係がたくさん浮かんでいるので、本当にすぐに制御不能になるようです。
public void DeleteUser(User u)
{
db.Profiles.DeleteObject(u.Profile);
db.aspnet_Membership.DeleteObject(u.aspnet_Membership);
db.Users.DeleteObject(u);
db.SaveChanges();
}
シンプルだと思われます。あなたのスクリーンショットでは、強調表示された部分は、あなたが投稿を削除すると、関連するすべてのコメントが一緒に表示されることを意味しますか?私の質問では、私は1:1ユーザー:プロファイルがあります。ユーザーを削除すると、プロファイルも削除されますが、ユーザーが削除されていない場合は誤ってプロファイルを削除することはできません。 – Pete
@Pete:はい、あなたのステートメントは正しい - 実際にこの問題をチェックしている - あなたがデータベースをやっていると仮定すると、EFはDBからカスケード削除を取得しているはずです - 設定をして、 「データベースから更新」することで再追加してください。カスケード削除が追加されるはずです。後であなたのモデルで再確認してください。この記事もチェックしてください:http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx – BrokenGlass