2011-08-16 3 views
1

Ces objets ont des collections de type ICollection <>objets Entity Framework T4 POCO élevage exception dans WCF

Si je passe un graphe d'objet du client au serveur, il jette l'exception suivante:

System.NotSupportedException was unhandled by user code 
    Message=Collection was of a fixed size. 
    Source=mscorlib 

Ce qui est se produit dans le code de correction généré par le modèle T4. Il semble que les collections sont désérialisées sur le serveur sous forme de tableaux et ne peuvent donc pas être modifiées. Existe-t-il un moyen de spécifier le type que le sérialiseur doit utiliser?

Répondre

5

Je recommande fortement que vous n'utilisez pas Poco classes sur votre limite de service. Créez un ensemble distinct de classes pour modéliser les données que vous souhaitez envoyer et recevoir sur le réseau (Data Transfer Objects - DTO) et utiliser un outil tel que automapper pour déplacer des données entre les DTO et vos classes POCO

Essentiellement, vous finissez par attacher les consommateurs de votre service au modèle conceptuel interne de votre service, ce qui signifie que vous devenez contraint de modifier votre implémentation parce que vous devez éviter de casser vos clients.

+0

Je pense que vous avez raison. Ce n'est que l'un des problèmes que j'ai essayé de faire passer le modèle de domaine à la couche de service. Il y a aussi des propriétés comme les clés étrangères que je ne veux pas exposer ... et d'autres problèmes. Alors merci pour le conseil. – user380689

2

Essayez d'utiliser l'attribut suivant

[ServiceKnownType(typeof(List<string>))] 

Si cela ne fonctionne pas, essayez peut-être à l'aide IList<T> si cela est possible dans votre situation