Ich versuche eine Entity (Entity Framework 6) in json zu serialisieren. Ich sorge dafür, dass der Eintrag im Speicher vor der Serialisierung über die AsNoTracking () -Methode, aber ich bekomme einen Fehler, wie es einen Wert aus einer anderen Tabelle erhalten, die im Eintrag verwiesen wird.
%Vor%Code:
%Vor%Ich möchte nur eine Zeichenfolge der serialisierten Entität zurückgeben. Ich mache mir keine Sorgen um andere Objekte, nur um die Entitäten der Standorte.
Als ich versuchte, die Verbindung zu disponieren und dann json serialisieren, erhielt ich den Fehler: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.
Ich möchte nur meine Liste serialisieren, ich möchte keine fremden Abhängigkeiten zurückgeben / serialisieren.
Dies ist ein EF
's Problem mit dem dynamischen Proxy, das Sie deaktivieren müssen, damit Ihr Code funktioniert
in Ihrer Klasse, die von DbContext
Hauptsächlich passiert, dass Ihr JsonConvert
versucht, ein Objekt wie dieses System.Data.Entity.DynamicProxies.Location_5E43C6C196972BF0754973E48C9C941092D86818CD94005E9A759B70BF6E48E6
aufgrund des Proxys, der nicht gefunden werden kann, weil er dynamisch erstellt wird
Sie müssen nicht die Methode AsNoTracking
aufrufen, um die benötigten Entitäten in den Speicher zu laden. Die ToList
Methode wird diesen Job erledigen.
Nun zu Ihrem Problem, liegt daran, dass der JSON-Serializer versucht, auf jede Eigenschaft in einer Location
-Instanz zuzugreifen, und Sie können die gesamte Datenbank abfragen, nur weil das verzögerte Laden aktiviert ist. Also, Sie haben zwei Möglichkeiten:
JsonIgnore
über die Navigationseigenschaften, die Sie nicht laden möchten . Persönlich bevorzuge ich die erste, und wenn ich eine Entität mit einer bestimmten verwandten Entität laden muss, verwende ich eifrig laden , um es als Teil der Abfrage zu laden:
%Vor% Wenn Ihr Objektgraph nicht zu kompliziert ist, könnte ein anderer Ansatz darin bestehen, eine einfache POCO-Klasse zu erstellen, aus der Ihr Location
zugeordnet wird. Sagen wir LocationModel
. Dies könnte manuell oder zum Beispiel mit AutoMapper abgebildet werden.
Tags und Links c# entity-framework entity-framework-6 jsonserializer