Löschen Sie ein Objekt und alle zugehörigen Entitäten in Entity Framework

ado.net entity-framework

Frage

Weiß jemand, wie man ein Objekt und alle zugehörigen Entitäten in EF löscht, ohne das Objektdiagramm manuell zu durchlaufen und jedes Objekt zu löschen?

Zum Beispiel habe ich SalesOrder und SalesOrderDetails mit einer 1: N-Beziehung zwischen ihnen. Wenn ich eine SalesOrder lösche, möchte ich, dass alle SalesOrderDetails automatisch gelöscht werden.

Ist das in EF möglich?

Akzeptierte Antwort

Sie sollten dies im Entity Framework nicht tun. Alle gängigen relationalen Datenbanken unterstützen ON CASCADE DELETE für Fremdschlüssel, was ebenfalls wesentlich effizienter ist. Ich schlage vor, du gehst einfach mit.


Beliebte Antwort

In diesem Artikel hat Alex Jamese (der seine Antwort veröffentlicht) einen vollständigen Artikel zum Thema.

http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx

Die EF ist nach SaveChanges () für die Richtigkeit des ObjectContext verantwortlich. Die EF versucht also, den ObjectContext mit dem erwarteten Datenbankstatus nach der erwarteten Kaskade in der Datenbank zu synchronisieren. Ein typisches Zeichen dafür ist, dass Sie, wenn Sie etwas wie SqlProfiler öffnen, feststellen, dass die EF DELETE-Anforderungen für abhängige Entitäten ausstellt, von denen sie weiß (dh die im ObjectContext geladen sind), wenn ein Principal gelöscht wird. Im Wesentlichen geschieht hier, dass das Entity Framework erwartet, dass durch das Löschen des Principals in der Datenbank alle in der Datenbank enthaltenen abhängigen Elemente gelöscht werden. Es wird also ein redundantes DELETE-Kommando ausgegeben, um sich selbst anzufordern, damit die bereits geladenen Abhängigen aus dem ObjectContext gelöscht werden. Der Schlüssel ist zu beachten, dass die EF nicht alle abhängigen Entitäten abruft und Löschungen für sie ausgibt: Sie löscht nur abhängige Personen, die sich bereits im Speicher befinden.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum