2017-12-14 8 views
1

Ich habe eine Einheit site, die ein Konzept einer "Buddy-Site" hat. So habe ich das definiert als viele-zu-viele-Beziehung zu sich selbstEF löschen Einheit mit vielen zu vielen Beziehung zu sich selbst/optional viele-zu-viele

public class Site : Base 
{ 
    public DateTime EstablishedDate { get; set; } 
    public string Name { get; set; } 
    public string URL { get; set; } 

    public ICollection<Site> Buddies { get; set; } 
} 

Config:

public SiteConfig() 
{ 
    HasMany(x => x.Buddies).WithMany(); 
} 

Das funktioniert, bis ich versuche, eine site zu löschen, die Buddy-Websites hat, an welcher Stelle ich bekommen der Verweisbedingungsfehler. Wie definiere ich die Viele-zu-Viele-Beziehung als optional (0 zu viele)?

+0

Ist Ihre many-to-many-Verknüpfungstabelle eines 1. Klasse Mitglied der 'Context'? –

+0

Meine Viele-zu-Viele-Tabelle ist nicht explizit in 'Context' definiert. Es existiert nur als 'EF' automatisch generierte Tabelle. – americanslon

+0

Wenn Sie die Viele-zu-Viele-Tabelle im Kontext explizit verwalten, können Sie einen Kaskadenlöschvorgang verwenden, um den Eintrag in der Junction-Tabelle automatisch zu entfernen, wenn eine der zugeordneten Sites entfernt wird. –

Antwort

0

Versuchen Clear Verfahren vor den Speicher Änderungen Aufruf:

var site=Context.Sites.FirstOrDefault(); 
site.Buddies.Clear();// remove relationship but not entities 
Context.Sites.Remove(site); 
Context.SaveChanges(); 
+0

Das funktioniert, danke, aber ich kann das Gefühl nicht loswerden, dass dies nicht der beste Weg ist. In meinem speziellen Fall stammt die Entität von einer API-Schicht, sodass sie nicht verbunden ist. Ich muss die Entity anhängen und die 'Buddies' laden, um sie in der nächsten Zeile zu löschen. Ich hoffe, dass es eine bessere Konfigurationslösung gibt. – americanslon

Verwandte Themen