2017-01-31 2 views
0

テーブル内のレコードの削除が機能しますが、テーブルに子の外部キー関係がない限り、問題が発生します。親テーブルがあり、EFを使用してレコードを削除すると、「1つ以上の外部キー・プロパティーがnull値ではないため、関係を変更できませんでした」というエラーで失敗します。私は、親テーブルを参照している子テーブルのカスケード削除を削除しました。私はSSMS内でテストしました。それはうまく動作します。しかし、C#からは失敗します。一般的なDeleteRowメソッドを定義したビューモデルがあります。削除される行に子テーブルがない限り、これは素晴らしい動作です。テーブルが親テーブルの場合は失敗します。私はここでStackoverflowの答えを探してみましたが、今閉じた:stackoverflow.com/questions/17723276/delete-a-single-record-from-entity-frameworkこの質問に出くわしました。この質問に対する答えは、EFの離散的な表を使用していました。我々はジェネリック薬を使用している。それだけではない関連レコードのいずれかにするために、親テーブル内のレコードのためにそれを設定することだと、私はEntityState.Deletedが動作している列挙にStateプロパティを設定することは考えていないジェネリックを使用しているときに、EFから1つのレコードを削除するにはどうすればよいですか?

public void DeleteRow(T row) 
{ 
    if (App.MainDataContext != null && row != null) 
    { 
     App.MainDataContext.Entry<T>(row).State = EntityState.Deleted; 
     App.MainDataContext.SaveChanges(); 
    } 
} 

:ここに私たちのコードです子テーブル(MainDataContextは.EDMXファイルのエンティティです)ジェネリックを使用してテーブルタイプを渡すときに、EF 6を使用するテーブルから単一のレコードを削除するにはどうすればよいですか?

+0

[about](http://stackoverflow.com/questions/41858097/entity-framework-hard-cascade-delete/41859633#41859633)実際にはあなたが提供したリンクと同じです。あなたが必要とするのは、それを翻訳することだけです。例えば、 'App.MainDataContext.Set ().Attach(row); App.MainDataContext.Set ().Remove(row); ' –

答えて

0

状態を削除に設定すると、関連するエンティティもロードされます(コンテキストの変更トラッカーによって追跡される)。行を削除すると、EFは親ナビゲーション・プロパティーをnullに設定しようとしますが、ヌル可能な関係ではありません。

これを解決するには、データベース内だけでなく、モデル内関係(EDMX)でカスケード削除を設定する必要があります。

コンテキストのインスタンスによって関連エンティティが追跡されていない場合でも、これは機能するはずです。この場合、SQL Server側でカスケード削除が機能するはずです。

+0

興味深い、私にとっては予期しない。カスケード削除はデータベースに定義されています。私はデザイナーのEFモデル(.edmxファイル)に入って、データベースに基づいてエンティティをリフレッシュしました。私はそれがEFモデルに引き継がれたと思っていました。あなたが言っていることは、そうではないことを私に示唆しています。それは私を驚かせます。 – Rod

+0

あなたのエラーメッセージからのみ結論が出ましたが、アソシエーションセットのプロパティでチェックすることができます。カスケードしていないと思うので、ナビゲーションプロパティはnullに設定されます。これはEFによる論理アクションです。 – jannagy02

+0

私は "End1 OnDelete"プロパティをカスケードに設定しようとしました。親テーブルと同様の関係にある別の子テーブルでも同じことをしました。それから私はそれを集めた。さて、私は0の代わりに156のエラーがあります。VSのようなエラーは.edmxダイアグラムにあるテーブルを見つけることができません。 .edmxダイアグラムでカスケード削除を設定しようとすると、間違ったことが起こったと思います。私はどこでそれをするべきですか? – Rod

関連する問題