Deserialisierung von Problemen in Entity Framework 4.0

9

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

    
MegaMind 14.02.2012, 06:54
quelle

6 Antworten

3

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%     
Shiraz Bhaiji 22.02.2012 22:06
quelle
0

Sie könnten versuchen, den Entity Framework-Profiler zu verwenden und zu sehen, ob die generierte Abfrage gültige Daten enthält. Ссылка

    
marvelTracker 21.02.2012 12:31
quelle
0

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

    
Dmitry Frenkel 22.02.2012 19:32
quelle
0

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.

    
Bahri Gungor 22.02.2012 20:45
quelle
0

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

    
Malmi 23.02.2012 08:07
quelle
0

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

diskutiert     
Maciej D. 23.02.2012 08:10
quelle

Tags und Links