2009-10-25 3 views
0

En ce moment je fais quelques tests impliquant entityFramework et WCF. Si je comprends bien, les EntityObjects générés sont DataContracts et peuvent donc être sérialisés au client. Dans mon exemple, j'ai une entité "Pays" qui a 1 "Devise" comme propriété, quand j'obtiens un Pays et que j'essaie de l'envoyer au client, il émet une exception disant que les données ne peuvent pas être écrites.EntityFramework WCF issue

Mais, la chose est, si je reçois une monnaie (qui a une collection de pays) et ne charge pas ses pays, cela fonctionne. Le client obtient toutes les entités. Donc, en résumé: - J'ai une entité avec une autre entité comme propriété et je ne peux pas la sérialiser. - J'ai une autre entité avec une liste vide de propriétés et elle est sérialisée avec succès.

Des idées sur la façon de le faire fonctionner?

Répondre

0

Entity Framework ne charge pas automatiquement les entités associées, par ex. Si vous chargez votre entité "Pays", par défaut et à moins que vous ne fassiez quelque chose, la "Devise" associée ne sera pas chargée.

Ce que vous devez faire est soit .Include("Currency") dans votre requête EF, soit charger manuellement la propriété Currency associée. C'est une relation 1: 1, n'est-ce pas? Dans ce cas, votre entité Country sera plus susceptibles de contenir un membre appelé CurrencyReference et vous pouvez vérifier si c'est chargé ou non, et sinon, vous pouvez charger manuellement l'entité associée:

if(!myCountry.CurrencyReference.IsLoaded) 
{ 
    myCountry.CurrencyReference.Load(); 
} 

Lorsque vous faites cela, et puis sérialiser l'objet à envoyer sur WCF - ça marche maintenant?

Marc

+0

Je pense qu'il dit que ça n'arrive que lorsqu'il charge et entité et qu'il essaie de l'envoyer ... – Nix