2 votes

Étapes pour utiliser Entity Framework dans WCF

J'ai une question sur l'utilisation d'Entity Framework dans WCF. Je suis en train d'utiliser .NET 4.5 avec EF DbContext.

Voici ce que je sais faire pour utiliser EF dans WCF. Peut-être que cela est insuffisant ou certains éléments ne sont pas nécessaires.

  1. Créer un modèle EF ADO.NET.
  2. Séparer les classes POCO dans un projet séparé (Nom du projet : Entités) en utilisant le générateur de modèle DbContext.
  3. Pointer le modèle TT du projet POCO vers le fichier edmx dans le projet de données (Nom du projet : Données). "..\Données\MonEdmx.edmx"
  4. Ajouter les attributs [DataContract(IsReference(True))] et [DataMemeber] dans le fichier .TT du projet POCO afin que les classes et propriétés aient les attributs de sérialisation. Ajouter la référence à Runtime.Serialization au projet et ajouter le namespace au fichier .TT. Cela permet de ne pas perdre votre déclaration d'attribut lors de la recréation des classes lors de l'enregistrement du fichier .TT ou de l'ajout de nouvelles entités.
  5. Ajouter une référence au projet Entités dans le projet Données.
  6. Désactiver ProxyCreation et LazyLoading dans le fichier Context.tt du projet de données.
  7. Ajouter les projets (Nom du projet : Entités) et (Nom du projet : Données) à votre projet de service WCF.
  8. Copier la chaîne de connexion EntityFramework dans votre projet WCF.
  9. Toutes vos méthodes de sélection dans le service doivent utiliser .Include si vous souhaitez que les objets de navigation soient populés. Cela donne un meilleur contrôle lorsque vous souhaitez charger ou limiter les données à afficher. De plus, vous n'obtenez pas automatiquement les enfants/relations en raison de l'absence de chargement paresseux.
  10. Insérer ou mettre à jour ou supprimer, le service doit créer le contexte et définir manuellement l'état de l'objet comme modifié ou ajouté ? Sinon, les modifications ne seront pas enregistrées. Utilisez DbContext.Attach pour attacher et définir l'état de l'entité approprié Ajouté, Modifié, etc.

Le problème que j'avais était que je ne pouvais pas trouver un bon exemple des étapes à suivre pour utiliser EF avec WCF. J'ai pu voir seulement des morceaux. Peut-être suis-je un nouvel entrant dans le monde du WCF EF, donc je ne pouvais pas trouver.

Je ne suis pas sûr si je peux utiliser des proxies WCF. Je n'ai pas encore compris complètement l'avantage des proxies.

J'ai également lu des recommandations d'utiliser DTO comme une couche entre EF et le service. Cela nécessite un mappage à mettre en place. Je ne sais pas si j'en ai besoin tout de suite. Mais l'idée est claire, cela aide à masquer toutes les colonnes de base de données inutiles dans l'objet métier. Par exemple, les colonnes d'audit telles que créé par, mis à jour par, etc. que nous ne voulons pas afficher chez le client.

Je n'ai pas choisi d'utiliser DataServices car je perds d'autres options de liaison que j'obtiens de WCF. Je ne sais pas si c'est une bonne chose de perdre la simplicité des DataServices en pensant aux exigences futures des clients qui nécessitent/supportent d'autres mécanismes de liaison.

Toute recommandation est appréciée.

Mise à jour supplémentaire

J'ai trouvé ceci dans MSDN http://msdn.microsoft.com/en-us/library/ee705457(v=vs.100).aspx. Certains des liens pointaient vers la documentation préliminaire. Mais cela me donne quelques idées supplémentaires pour utiliser EF et WCF.

Cet article montre comment utiliser des proxies avec WCF, le suivi des modifications de POCO. C'est un bon début pour moi. Si quelqu'un a plus de conseils, veuillez partager vos réflexions.

Mise à jour 2 *Un autre excellent lien pour N-Tier*

http://msdn.microsoft.com/en-us/magazine/dd882522.aspx

Je suis content que le temps que je passe m'éduque vraiment !

0voto

isakavis Points 741

J'ai progressé dans l'utilisation d'EF avec WCF après avoir lu beaucoup ici et dans d'autres forums.

J'ai suivi les étapes suivantes. J'ai pu voir l'avantage d'utiliser DTO. Cela permet vraiment de masquer les champs que vous n'avez pas besoin d'exposer au client ou à d'autres services. Mais je retiens d'introduire DTO en raison de contraintes de temps.

J'ai utilisé context.Attach, context.Add et context.Entry.

J'ai également réalisé un petit prototype pour utiliser le service de données WCF. C'était un développement très rapide. Je retiens d'utiliser les services de données WCF pour le moment en raison de contraintes de temps pour apprendre ses fonctionnalités.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X