2010-03-03 4 views
0

Nous avons une référence de service qui pointe vers un service WCF. Elle agit comme un proxy à notre couche modèle où notre logique d'accès aux données est gérée. Sous le capot, nous utilisons Linq2Sql comme ORM pour faciliter la communication de la base de données.Contrôle des propriétés sérialisées via une référence de service

Nous utilisons les classes générées comme couche d'accès aux données, mais ce qui est retourné est en fait des objets DTO bêtes qui ne sont rien de plus que des POCO. Je voudrais faire deux choses)

1) Contrôler ce qui est disponible sur le client à travers la référence du service en termes de types personnalisés et leurs propriétés associées. C'est pour réduire la taille des classes qui descendent.

2) Je sais que Linq2Sql décore réellement toutes les classes générées avec mais je ne veux pas que ces classes descendent par la référence de service. À l'heure actuelle, si nous utilisons la classe comme type de retour de paramètre d'entrée, elle est sérialisée. C'est bien, sauf que je voudrais limiter quelles propriétés sont disponibles

Pensées?

Répondre

0

Donc, je l'ai trouvé. Fondamentalement, lorsque vous créez une référence de service, seuls les types utilisés d'une manière ou d'une autre sont sérialisés. Par défaut, si aucun DataContract n'est présent, tout est sérialisé.

Si un DataContract est présent, il recherche les propriétés DataMember décorées et ne les sérialise que. Tricky

+0

Pas difficile - documenté! :-) C'est pourquoi je préconise d'utiliser ** toujours ** explicitement [DataContract] et [DataMember] sur vos DTO. Faire cela est un peu plus de travail à l'avance, mais alors vous êtes explicite et clair sur ce qui est sérialisé (et ce qui est ignoré). Ce travail supplémentaire sera payant plus tard en mode maintenance - plusieurs fois! –

+0

Je suis d'accord, je ne l'ai tout simplement pas réalisé, en fait venu pour répondre AS je devais aller à la documentation :) drôle comment cela fonctionne. Et comme l'a dit Hal, nos classes générées sont abstraites et ne sont jamais utilisées comme valeurs de retour. – xximjasonxx

0

Vous souhaitez que les DTO traversent vos limites de service, extraites de vos objets Linq to SQL, correct? Si c'est le cas, alors je vous recommande de définir vos DTO (si vous avez beaucoup d'objets, écrivez ou trouvez de bons templates T4) et ensuite d'utiliser AutoMapper pour aller et venir entre vos objets DTO et Linq to SQL .

+0

Nous avons déjà défini tous les DTO. J'ai travaillé à abstraire toute utilisation (en dehors du contexte statique) des classes générées à partir de Linq2Sql car elles sont trop lourdes et causent des problèmes avec notre sérialiseur JSON – xximjasonxx

Questions connexes