0

Angenommen, ich habe eine Entität "Kategorie" und "Produkt" mit einer Beziehung "Eins-zu-viele". Wenn ich Kategorie lösche, möchte ich alle Produkte löschen, die zu dieser Kategorie gehören. Und mit dem Löschen meine ich das Setzen von IsDeleted-Flag auf "True", da ich es nicht für Real löschen möchte (was ich durch die Angabe einer Delete-Kaskade erreichen könnte). Ich habe herausgefunden, wie ich IsDeleted auf true setzen kann, wenn Category gelöscht wird, aber ich kann nicht herausfinden, wie man Produkte dieser Kategorie findet und dasselbe für sie tut. Irgendeine Hilfe?Wie lösche ich eine oder viele Beziehungen im EF-Kern?

public override int SaveChanges() 
    { 
     ChangeTracker.DetectChanges(); 

     foreach(var item in ChangeTracker.Entries<Category>().Where(e => e.State == EntityState.Deleted)) 
     {  
      item.State = EntityState.Modified; 
      item.CurrentValues["IsDeleted"] = true; 
     } 

     return base.SaveChanges(); 
    } 

I Abfragefilter auch so festgelegt, dass ich Elemente gelöscht werden nicht

builder.Entity<Category>().Property<bool>("IsDeleted"); 
    builder.HasQueryFilter(c => !EF.Property<bool>(c, "IsDeleted")); 
+0

Ich glaube, Kategorie Entität hat Produkte benannte Eigenschaft, von wo Sie eine Liste der Produkte, die zu dieser Kategorie gehören, erhalten können. –

Antwort

0

auf Kaskade Verwenden Sie einfach löschen. Wenn Sie die Kategorie löschen, werden alle Produkte dieser Kategorie basierend auf der Navigationseigenschaft als gelöscht markiert. Dies wird von EFCore selbst durchgeführt. Ich verwende diesen Ansatz in meinem Code, um eine von vielen zu löschen. Dann verwenden Sie (so Ihr Code wiederholt auf Produkte):

+0

Ich habe diesen Ansatz versucht, aber es funktioniert nicht für mich und ich habe keine Ahnung warum – RooT

Verwandte Themen