Nun, ich habe ein zu viele verwandte Modelle:
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Child> Children { get; set; }
}
public class Child
{
public int Id { get; set; }
public string ChildName { get; set; }
}
Ich möchte Parent.Children
verwandte untergeordnete Entitäten löschen und aus der Datenbank entfernen. Ich habe es bereits versucht:
Datenbankkontextklasse:
modelBuilder.Entity<Parent>()
.HasMany(p => p.Children)
.WithOptional()
.WillCascadeOnDelete(true);
Dies funktioniert einwandfrei, aber ich habe immer noch redundante Datensätze in der Datenbank mit Parent_Id = null
Feldern, wenn ich dies tue
parent.Children.Clear();
repository.InsertOrUpdate(parent);
in meiner Repository-Klasse. Das gleiche Verhalten ist auch, wenn ich:
modelBuilder.Entity<Parent>()
.HasMany(pr => pr.Children)
.WithOptional(ri => ri.Parent)
.WillCascadeOnDelete(true);
mit zusätzlicher Parent
Eigenschaft in der Child
Klasse
public class Child
{
...
public Parent Parent { get; set; }
...
}
oder wenn ich es tue
modelBuilder.Entity<Child>()
.HasOptional(p => p.Parent)
.WithMany(p => p.Children)
.HasForeignKey(p => p.Parent_Id)
.WillCascadeOnDelete(true);
mit zusätzlicher Parent_Id-Eigenschaft in der Child
Klasse
public class Child
{
...
public int Parent_Id { get; set; }
...
}
Wie kann ich das Löschen von Kaskaden korrekt konfigurieren? Oder wie soll ich diese untergeordneten Entitäten entfernen? Ich nehme an, das ist eine Gelegenheitsaufgabe, aber mir fehlt nur etwas.
OnModelCreating()
? Wenn ich Ihre Entitäten und Ihren ersten Zuordnungsversuch kopiere und einfüge (undId
als Schlüsseleigenschaft für beide Entitäten festlege ), werden Löschvorgänge für mich korrekt kaskadiert.