Vielleicht hängt es von der Bedeutung von Detach
ab. Angehängte Entität bedeutet, dass der Kontext die Entität kennt und ihre Änderungen verfolgt. Wenn Sie den Kontext entsorgen, kann er keine Änderungen mehr verfolgen und die Entität ist wie losgelöst. Das Gleiche hat hier eine echte Bedeutung.
Wenn Sie dynamische Proxies verwenden (POCO - dynamic change tracking oder lazy loading), behält der Proxy selbst einen internen Rückwärtsverweis auf den Kontext, reagiert jedoch nicht auf die Kontextverwendung. Es behält immer noch den Verweis (übrigens. Dies kann Quelle von einigen unangenehmen Speicherlecks sein). Dies verursacht ein Problem in zwei Situationen:
ObjectDisposedException
, weil der Proxy einen verzögerten Ladevorgang für den entsorgten Kontext auslöst. Die einzige Möglichkeit, dies zu vermeiden, besteht entweder darin, dynamische Proxies zu deaktivieren oder die Entität manuell abzutrennen, bevor der Kontext freigegeben wird. Dies hat einen weiteren Nachteil - das Trennen der Entity bricht die Beziehungen.
Nein, du musst nicht auf deine Entitäten loslassen. Wenn Sie jedoch etwas tun wie:
%Vor%und dann über Ihren Kontext verfügen, wird eine Ausnahme ausgelöst, da IEnumerable die Ausführung verzögert hat. Tun Sie dies:
%Vor% Mitkönnen Sie weiterhin Ihre Personenliste verwenden.
Weiter,
%Vor%funktioniert, nachdem der Kontext entfernt wurde, weil Sie eine bestimmte Entität und keine Enumeration abgerufen haben.
Tags und Links .net c# entity-framework