1

Ich habe 2 Datenbanktabellen, und ich möchte, wenn ich Daten in der Tabelle löschen, wo der Fremdschlüssel zeigt (wo der Primärschlüssel ist), die Fremd Schlüssel, der auf diese Daten zeigt, wird ebenfalls gelöscht.Löschen Sie die Fremdschlüsseldaten, wenn die Daten in der Fremdtabelle gelöscht werden

[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"); 
    } 

Der Fremdschlüssel ist nicht nullfähig.

enter image description here (der Fehler ich)

vorgehen/beheben, dass? (helfen Sie mir, den richtigen Titel zu machen)

+2

Sie können Kaskadenlöschung auf Primärtabelle in DB Server konfigurieren – Rab

+0

Ich möchte es tun, ohne die SQL Server MS zu öffnen. Ich möchte es mit LINQ tun – Arianit

Antwort

1

Es kann möglich sein, wenn .Net oder EF den Code für Ihren Zusammenhang, dass die

.WillCascadeOnDelete() 
erzeugt

auf false gesetzt wurde, so dass es nur zu wahr ändern und versuchen, ob es funktioniert.

2

Wenn Sie es nicht über den SQL-Server tun möchten, müssen Sie alle untergeordneten Objekte in db context laden und löschen.

+0

ist nicht '.Include (i => i.RepFilters)' tun das? – Arianit

+0

sind möglicherweise andere untergeordnete Objekte vorhanden? –

+0

Nein. Es gibt 2 Tabellen: Berichte und RepFilter. RepFilters hat einen Fremdschlüssel, der auf Berichte zeigt, und dieser Fremdschlüssel ist nicht nullbar. – Arianit

1

Ihr Fremdschlüssel sollte als auf Löschen CASCADE auf Update CASCADE konfiguriert werden.

+0

wie genau meinst du? kannst du genauer sein? – Arianit

+0

Überprüfen Sie Ihren Fremdschlüssel. –

+0

alles ist in diesem Punkt eingerichtet – Arianit