2017-12-22 13 views

Antwort

1

Das Löschverhalten nur mit fließend API angegeben werden können:

modelBuilder.Entity<Customer>() 
    .HasOne(e => e.Parent) 
    .WithMany() // or .WithOne() 
    .OnDelete(DeleteBehavior.Cascade); 

Aber Beachten Sie, dass Ihr Modell rekursiv ist, was als mehrere Kaskadenpfade behandelt wird, so dass DeleteBehavior.Cascade und DeleteBehavior.SetNull nicht anwendbar sind. Sie müssen wählen zwischen DeleteBehavior.Restrict (standardmäßig ohne fließende Konfiguration) und DeleteBehavior.ClientSetNull, aber in beiden Fällen müssen Sie das Löschen von Hand oder mit Datenbank-Trigger behandeln.

+0

Die Dokumentation sagt SetNull ist der Standardwert. Wenn ich mehr Referenzen auf mein Customer-Objekt habe, welchen Ausdruck muss ich in O WithOne (x => x.?) Eingeben? – Rookian

+0

Der Standardwert ist 'Cascade' für erforderliche und' ClientSetNull' für optionale Beziehungen - siehe Abschnitt "Cascade Delete" von [Beziehungen] (https://docs.microsoft.com/en-us/ef/core/modeling/relationships). Von was würden Sie in "WithOne" setzen, hängt es von der Anwesenheit der umgekehrten Navigationseigenschaft ab (die Sie nicht zeigten) und wie es benannt wird. Das obige ist für Ihr Beispielmodell (keine inverse Eigenschaft). Falls Sie 'public Customer Child {get; einstellen; } 'to' Customer', dann würden Sie 'HasOne (e => e.Parent) .WithOne (e => e.Child)' verwenden –

Verwandte Themen