Ich arbeite an einer Anwendung mit Entity Framework 4.0. und WCF.
Ich gebe eine Liste von Objekten zurück, sagen Sie (Mitarbeiter)
und die Navigationseigenschaft dieses Objekts ist sagen (Abteilungen)
und Abteilung hat weiter eine Navigationseigenschaft (Zweigstelle)
Ich schließe alles als
ein %Vor%Nun werden alle Abteilungen, deren Zweigstelle gleich ist, auf Null gesetzt (mit Ausnahme der ersten), wenn Sie auf WCF deserialisieren.
Ich muss den Zweig für einige verbindliche Zwecke verwenden, bitte leiten Sie mich, wie ich dieses Problem loswerden sollte.
Dies ist der Screenshot der Entitäten
Es kann sein, dass die Daten nicht vor der Serialisierung geladen werden, aber wenn Sie auf der Serverseite debuggen, verursacht das verzögerte Laden, dass die Daten geladen werden.
Ein paar Dinge, die Sie ausprobieren könnten.
Dies erzwingt die Ausführung der Abfrage:
%Vor%Dies lädt die Entitäten explizit:
%Vor%Sie könnten versuchen, den Entity Framework-Profiler zu verwenden und zu sehen, ob die generierte Abfrage gültige Daten enthält. Ссылка
Von MSDN
Windows Communication Foundation (WCF) kann Proxies nicht direkt serialisieren oder deserialisieren, da der DataContractSerializer nur bekannte Typen serialisieren und deserialisieren kann, und Proxytypen sind keine bekannten Typen. Wenn Sie POCO-Entitäten serialisieren müssen, deaktivieren Sie die Proxyerstellung oder verwenden Sie die ProxyDataContractResolver-Klasse, um Proxyobjekte als ursprüngliche POCO-Entitäten zu serialisieren. Um die Proxy-Erstellung zu deaktivieren, legen Sie die ProxyCreationEnabled-Eigenschaft auf false fest.
Überprüfen Sie darüber hinaus, ob Sie Interoperable Objektreferenzen verwenden? Ich würde das auch versuchen. Befolgen Sie die Anweisungen hier zum Einrichten von
Auf Ihren POCO-Klassen + Enumerationen und Structs (die alle serialisiert sind) müssen Sie das DataContract-Attribut mit IsReference = true haben:
%Vor%Es ist die IsReference = true, die sicherstellt, dass alle Zeiger während der Serialisierung in Referenzen konvertiert werden. Stellen Sie außerdem sicher, dass Ihre Referenzen über ein DataMember-Attribut verfügen.
In den POCO-Klassen verwenden Sie [DataContract]
für die Klasse, [DataMember]
für Eigenschaften, wie Bahri Gungor . Zusätzlich können Sie einige Methoden schreiben, die vom Serializer aufgerufen werden. Überprüfen Sie MSDN für: OnDeserialized OnDeserializing , OnSerialized und OnSerializing
In WCF-Service müssen Sie ein Attribut angeben, um anzugeben, wo Sie EF-Proxy-Klassen zurückgeben möchten.
%Vor%Und der ApplyDataContractResolver sieht folgendermaßen aus:
%Vor% Hintergrund ist, dass die WCF mit einem DataContractSerializer
serialisiert und EF Proxy-Klassen erstellt, um die Änderungen zu verfolgen.
Hier ein Link zu MSDN für ProxyDataContractResolver
: MSDN
Versuchen Sie, .Include()
für die Abfrage zum Laden verwandter Objekte und das Attribut [Include]
in den Metadaten zu verwenden, damit diese verwandten Objekte serialisiert und an den Client gesendet werden können.
Dieses Problem (oder zumindest ähnliches) wird hier
diskutiertTags und Links wcf c# entity-framework-4