2010-02-26 4 views
12

L'année dernière, j'ai développé un service d'accès aux données pour notre projet en utilisant Entity Framework (.NET3.5 bien sûr) et en utilisant le livre de Julie Lerhman comme outil de suivi des objets POCO. Nous utilisons WCF et avons également des clients Silverlight 3. Nous passons à .NET 4.0 et je veux passer à l'utilisation de la génération de code pour éliminer le temps de développement gaspillé à écrire les classes POCO et les classes de traduction.EF4 POCO: Snapshot vs Auto-suivi sur WCF

Avec la recherche que je l'ai fait semble qu'il y ait 3 façons de Poços de suivi de l'état:

1) Changé suivi proxies: Ne semble pas être utile pour nous car il semble que cela ne fonctionne pas sur WCF sérialisation.

2) Snapshot based: Snapshot est pris lorsque le graphe d'entité POCO est récupéré, le graphique retourné par le client est comparé à cet instantané et les différences sont comparées ... me semble bien.

3) Entités auto-suivies: Le générateur de code génère une logique pour effectuer un suivi automatique dans les objets POCO. Cela semble proche de ce que nous faisons maintenant, sauf que tout est généré pour nous. J'essaie de déterminer quels sont les avantages et les inconvénients de toutes ces méthodes. Je devine que 1 et 2 sont "connectés" et qu'ils ont besoin du ObjectContext que les POCO ont été initialement demandés pour rester instanciés, mais n'ont pas pu le confirmer. Je ne vois pas non plus pourquoi quelqu'un voudrait vraiment s'inquiéter de l'option 1 étant donné que l'option 3 semble faire la même chose et plus ...

Snapshot me semble le plus simple, mais si cela nécessite un ObjectContext pour rester ouvert depuis longtemps je ne suis pas si sûr ...

Je suis seulement un programmeur junior donc aucun conseil ici, surtout en ce qui concerne Silverlight 3 (je crois que les options 2 et 3 fonctionnent avec Silverlight 3 mais 2 peuvent avoir des problèmes) est très apprécié.

+0

En tant que mise à jour, j'utilise maintenant State Tracked Entities dans notre application WCF/Silverlight 4 et ils fonctionnent plutôt bien (bien qu'ils aient des problèmes avec les suppressions). Les propriétés de navigation sont maintenant des TrackableCollections qui dérivent de ObservableCollection et se lient ainsi à XAML dans un rêve. Je recommande vivement cette solution. – MrLane

+0

Copie possible de http://stackoverflow.com/questions/3814706/self-tracking-entities-vs-poco-entities et de http://stackoverflow.com/questions/6116002/entity-framework-self-tracking-entities -vs-poco –

Répondre

14

Optez pour l'option 3. Les entités auto-surveillantes, telles qu'elles ont été conçues.

« auto-suivi des entités sont optimisées pour les scénarios de sérialisation »

This post donne une bonne démonstration.

+10

Self-Tracking-Entities (STE) a un inconvénient majeur. Vous devez partager le code généré par le générateur de code T4 pour que le STE fonctionne correctement. Cela signifie que vous ne pouvez pas utiliser les classes générées par les métadonnées de référence du service de données du côté client, donc une limitation au côté client .NET uniquement. –

+0

Oui, vous avez raison de ne pas pouvoir générer de proxies client. Nous avons codé nos procurations à la main et partagé le code sur le client. Techniquement, vous pouvez simplement partager les binaires contenant les entités avec votre client .NET ou Silverlight (vous devez créer un fichier .dll compatible avec Silverlight si votre client est Silverlight). – MrLane

+0

Plus maintenant. STE ne sont plus recommandés. – DarthVader

2

Les deux autres options ne sont applicables que lorsque les modifications sont effectuées lorsque le contexte objet est autour. Votre seule option est STE. Avec STE, les entités suivraient leurs propres changements. Lorsque le graphique d'objet modifié est envoyé au serveur, vous pouvez simplement lire ces modifications comme indiqué ci-dessous. db.Dustomers.ApplyChanges (client); db.SaveChnages(); Avec STE, vous pouvez créer vos entités dans un projet de bibliothèque de classes et les partager entre un client WCF, un client Silverlight, asp.net et wpf. Cela vous permet donc de réutiliser des entités pour différents clients.

Questions connexes