1

2つのデータベーステーブルがあり、外部キーが指しているテーブルのデータ(プライマリキーがある場所)、外部そのデータを指すキーも削除されます。外部テーブルのデータが削除されたときに外部キーデータを削除する

[HttpPost, ActionName("Delete")] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> DeleteConfirmed(int id) 
    { 

     Report report = await db.Reports 
      .Include(i => i.RepFilters) 
      .Where(i => i.ID == id).SingleAsync(); 

     db.Reports.Remove(report); 

     await db.SaveChangesAsync(); 
     return RedirectToAction("Index"); 
    } 

外部キーはNULL可能ではありません。

enter image description here (私が取得エラー)

行うにはどのように/それを修正?

+2

DBサーバーのプライマリテーブルにカスケード削除を構成することができます – Rab

+0

SQL Server MSを開かずに実行します。私はLINQでそれをやりたかった。 – Arianit

答えて

1

それはとてもちょうどこれをtrueに変更し、それが動作するかどうか試してください、可能することができます。

2

SQLサーバーを使用したくない場合は、すべての子オブジェクトをdb contextにロードして削除する必要があります。 .NETまたはEFが

.WillCascadeOnDelete() 

がfalseに設定されたあなたのコンテキスト用のコードを生成したとき

+0

は '.Include(i => i.RepFilters)'ではないのですか? – Arianit

+0

他の子オブジェクトがあるかもしれませんか? –

+0

いいえ..レポートとRepFiltersの2つのテーブルがあります。 RepFiltersにはReportsを指す外部キーがあり、その外部キーはNULL可能ではありません – Arianit

1

更新CASCADEの削除CASCADE には、外部キーが として設定されている必要があります。

+0

あなたは意味ですか?もっと具体的になりますか? – Arianit

+0

外部キーを確認してください。 –

+0

この時点ですべてが設定されています – Arianit

関連する問題