2011-03-29 21 views
3

私は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(); 
} 

答えて

2

これらのタイプの依存関係は、どのようにして に管理されますか?そのトラックを維持していること EFの目的を全滅させる だから私は何かを逃していると推測している マイナー。

@Danny Varodが指摘したように残念ながら、これはまだ手動のプロセスであり、かつ2倍:あなたのデータベースで

  1. を、外部キー関係が既にことを確認して、確立されたと仮定すると"削除 - >カスケード"の条件が選択されています。これはSQL Server Management Studioで変更できます。

  2. EFエンティティモデルでは、このオプションを関係にも指定する必要があります。これは、関係を表すエンティティ間の点線を選択するだけです。プロパティでは、 "カスケード削除"の適切なオプションが表示されます - と*を除いて、終了の削除を選択する必要があります。

enter image description here

+0

シンプルだと思われます。あなたのスクリーンショットでは、強調表示された部分は、あなたが投稿を削除すると、関連するすべてのコメントが一緒に表示されることを意味しますか?私の質問では、私は1:1ユーザー:プロファイルがあります。ユーザーを削除すると、プロファイルも削除されますが、ユーザーが削除されていない場合は誤ってプロファイルを削除することはできません。 – Pete

+0

@Pete:はい、あなたのステートメントは正しい - 実際にこの問題をチェックしている - あなたがデータベースをやっていると仮定すると、EFはDBからカスケード削除を取得しているはずです - 設定をして、 「データベースから更新」することで再追加してください。カスケード削除が追加されるはずです。後であなたのモデルで再確認してください。この記事もチェックしてください:http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx – BrokenGlass

1

概念モデル(およびdb)の関係のカスケード削除。

+0

私は、カスケーディングを利用するために方法を知っていたならば、私のエンティティモデルと、私は質問を掲載しているではないでしょうデータベース上で削除されます。依存関係について心配する必要がないように私のコードを書き直す方法について、あなたは少なくとも疑似コードを持っていますか? – Pete

+1

私は関係を変更し、削除タイプをcasacade –

+0

に設定することができると信じています。edmxデザインで、関係を選択し、プロパティツールウィンドウでEnd1/2をDeleteに変更してカスケードに変更します。 –

関連する問題