Générer des classes POCO dans différents projets avec le modèle Entity Framework

.net code-generation entity-framework poco repository-pattern

Question

J'essaie d'utiliser le modèle de référentiel avec EF4 à l'aide de VS2010.

Pour ce faire, j'utilise la génération de code POCO en cliquant avec le bouton droit de la souris sur le concepteur de modèle d'entité, puis en cliquant sur Ajouter un élément de génération de code. Je sélectionne ensuite le modèle POCO et récupère mes cours.

Ce que j'aimerais pouvoir faire, c’est que ma solution soit structurée en projets distincts pour les classes POCO (Entity) et en un autre projet pour le modèle d’entité et le code de référentiel.

Cela signifie que mon projet MVC pourrait utiliser les classes POCO pour des vues fortement typées, etc., sans avoir à connaître le référentiel ni à y faire référence.

Pour brancher tout cela, j'aurai un autre projet séparé avec des interfaces et j'utiliserai IoC.

Cela sonne bien dans ma tête, je ne sais tout simplement pas comment générer les classes dans leur propre projet! Je peux les copier, puis modifier les espaces de noms correspondants, mais je voulais éviter le travail manuel chaque fois que je modifie le schéma de la base de données et que je souhaite mettre à jour mon modèle.

Merci

Réponse acceptée

En réalité, les modèles T4 dans EF 4.0 ont été conçus en tenant compte de ce scénario :)

Il y a 2 modèles:

  • Un pour les entités elles-mêmes (c'est-à-dire ModelName.tt)
  • Un pour ObjectContext (c'est-à-dire ModelName.Context.tt)

Vous devez placer le fichier ModelName.tt dans votre projet POCO et modifier le modèle pour qu'il pointe vers le fichier EDMX du projet prenant en compte la persistance.

Ça a l'air bizarre, je sais: il y a maintenant une dépendance, mais c'est au moment de la génération T4, pas au moment de la compilation! Et ça devrait aller? Parce que l'assemblage POCO résultant est encore complètement ignorant par persistance.

Voir les étapes 5 et 6: http://blogs.msdn.com/adonet/pages/walkthrough-poco-template-for-the-entity-framework.aspx pour plus d'informations.

J'espère que cela t'aides

Alex


Réponse populaire

@Entaille,

  1. Pour forcer la régénération des entités POCO, il vous suffit de cliquer avec le bouton droit de la souris sur le fichier .tt principal et de sélectionner "Exécuter l'outil personnalisé". Cela le forcera à régénérer vos classes POCO avec vos modifications mises à jour du modèle .edmx.
  2. Y a-t-il un problème pour que vous puissiez aller de l'avant et cliquer avec le bouton droit de la souris sur le modèle et sélectionner "Générer la base de données à partir du modèle ..." même si vous ne générez pas nécessairement la base de données? Cela éliminera très probablement votre "Erreur 11007 ...".
  3. Je pense que cela équivaut à un "Code Behind". Je ne sais pas plus que ça.

Une autre chose à noter sur le lien que Alex a donné. Une fois que j'ai déplacé mon fichier .tt principal vers un autre projet, le fichier généré à partir du fichier ".Context.tt" ne se compilait plus car il manquait des références aux fichiers POCO situés dans un autre ObjectContext dans un domaine différent de celui de mes fichiers POCO). J'ai dû modifier le fichier ".Context.tt" pour qu'il using Poco.Namespace un using Poco.Namespace (où Poco.Namespace est le nom de l'espace de noms dans lequel les fichiers POCO ont été générés). Cela a ensuite permis à mon projet de se compiler.

Joel



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow