WCF, EF4, POCO og serialisering

by Israr Khan 22. desember 2010 11:20

Testet ut EF4, Poco og WCF? Fått en feilmelding av følgende type:

Receivera:InternalServiceFaultCannot serialize parameter of type 'System.Data.Entity.DynamicProxies.FOO' (for operation 'GetFoo', contract 'FooService') because it is not the exact type 'Model.Foo' in the method signature and is not in the known types collection. In order to serialize the parameter, add the type to the known types collection for the operation using ServiceKnownTypeAttribute

Lagt merke til at objektene som er virtuelle blir definert som Proxy-Typer? Dette betyr at selv om basen består av ditt POCO-objekt, vil det under runtime bli generert et dynamicProxy-object, som ikke gjenspeiler ditt objekt direkte(men det gjør det indirekte som følge av at basen består av ditt poco-object). Dette skaper problemer når du skal serialisere disse objektene ut i pipen, hente ut attributter, kjøre reflection og siden proxy-typene heller ikke er known types, må disse behandles korrekt, enten ved å opprette en egen DataContractResolver, eller ved å skru av ProxyCreation.

Så perfekt - burde vært enkelt? Tja: Sjekk ut release notes for CTP5:

DbContext.ObjectContext has moved:
Rather than being a protected member we have made the underlying ObjectContext available via an explicitly implemented interface, this allows external components to make use of the underlying context. Getting the context now looks like: ((IObjectContextAdapter)myContext).ObjectContext

Så DbContext har ingen direkte property hetende ObjectContext. Så bruk  ((IObjectContextAdapter)myContext).ObjectContext for å få tilgang til ObjectContext-en for å skru av ProxyCreation.

Sjekk ut:

http://msdn.microsoft.com/en-us/library/ee705457.aspx, Walkthrough: Serialize POCO Proxies with WCF
http://msdn.microsoft.com/en-us/library/dd456853.aspx , Working with POCO Entities.
http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-released.aspx , Release notes for CTP5

Tags: , , , , , , , ,

Koding

Om meg

Kodeverk.net er drevet av .Net-utvikler Israr Khan.

Han jobber som gruppeleder og  seniorkonsulent for Capgemini Norge.

Hans fokusområder er alt innenfor .Net-verden, og har foreløpig tilgode å finne noe som han ikke finner av interesse innenfor teknologien. Han er drevet av genuin interesse for teknologi og lever for faget.


 

View Israr Khan's profile on LinkedIn

Month List