Es gibt kein Detach(object entity)
auf dem DbContext
in Entity Framework 5.
Um eine Entity zu lösen, muss der Status nun geändert werden. Vielleicht fehlt mir etwas, aber das scheint weniger intuitiv und lesbar zu sein als die Methode Detach
:
Ich bin versucht, einfach eine Erweiterungsmethode zu erstellen, um die Detach-Methode zurückzubringen:
%Vor%Aus welchem Grund hat Microsoft die DbContext.Detach () -Methode in EF 5 entfernt?
Das Entfernen einer Detach
-Methode aus der ( DbContext
) API hat eine gewisse Logik, weil Detach
nicht auf einem Objektgraphen operiert, sondern nur das einzelne Objekt, das Sie an die Methode übergeben. Dies unterscheidet sich von allen anderen Methoden, die den Objektstatus ändern:
Attach
hängt das bereitgestellte Objekt einschließlich aller zugehörigen Objekte im Objektdiagramm der Navigationseigenschaften Add
fügt das bereitgestellte Objekt einschließlich aller verwandten Objekte zum Kontext Remove
löscht das gelieferte Objekt einschließlich der zugehörigen Objekte, die mit dem kaskadierenden Löschvorgang Andererseits wird der Status manuell auf Modified
, Added
oder Deleted
gesetzt. Dies wirkt sich immer nur auf das angegebene Objekt und nicht auf die zugehörigen Objekte aus. Dies ist auch der Fall, wenn Sie die Methode Detach
von ObjectContext
aufrufen. Es ist konsequenter, ein Objekt nur durch Festlegen des Status auf Detached
zu lösen, um mit dem Verhalten anderer Statusänderungen in Einklang zu sein, da es wie jedes andere nur das bereitgestellte Objekt ohne verwandte Objekte beeinflusst.
DbContext
soll unter anderem die Arbeit mit Entity Framework erleichtern. Die alte Detach
-Methode war verwirrender und ihr Verhalten ist nicht so, wie viele Entwickler erwarten. ( Hier und hier sind zwei Referenzen über diese Verwirrung und die Komplexität beim Trennen eines Objekts.) Meiner Meinung nach war es nicht der falsche Schritt, sie aus der DbContext
API zu entfernen.
Nun, Sie können immer Ihre eigene Erweiterungsmethode wie Sie schreiben oder auf den zugrunde liegenden ObjectContext
über den Adapter zugreifen, wenn Sie wirklich eine Detach
Methode haben wollen.
Tags und Links .net c# entity-framework entity-framework-5