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.Childrenverwandte 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 = nullFeldern, 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 ParentEigenschaft in der ChildKlasse
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 ChildKlasse
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 (undIdals Schlüsseleigenschaft für beide Entitäten festlege ), werden Löschvorgänge für mich korrekt kaskadiert.