Ma question est assez simple : est-ce une bonne pratique que de placer la .edmx
dans le dossier modèle d'une application Web d'un projet MVC3 ?
Réponses
Trop de publicités?Ma réponse est assez simple : ne pas mélanger la couche de présentation (toute application MVC) avec la logique d'accès aux données et la modélisation des données.
Ayez au moins 4 projets dans votre solution Visual Studio, de bas en haut :
1 - ProjectName.Interfaces (Bibliothèque de classes, interfaces d'entités) ;
2 - ProjectName.DAL (Bibliothèque de classes, la seule autorisée à savoir que l'EF est utilisé, les entités POCO implémentent les interfaces du projet 1 en utilisant un autre fichier où l'on redéclare les mêmes objets en utilisant des classes partielles...) ;
3 - ProjectName.BL (Bibliothèque de classes, logique d'entreprise, référence les deux projets ci-dessus 1 et 2) ;
4 - ProjectName.Web (application ASP.NET MVC, couche de présentation, fait référence aux deux projets 1 et 3 mais PAS au 2) ;
Ceci pour simplifier les choses, bien sûr. D'après mon expérience, il s'agit d'une conception solide, un peu trop lourde pour les très petits projets, mais payante à long terme.
à mon avis, le M de MVC, Model, n'est PAS le modèle de données, n'est pas l'EF, n'est pas là pour faire de l'ORM lié au moteur de base de données spécifique.
cette réponse est bien sûr subjective et se base sur mon expérience personnelle ;-)
Je suis tout à fait d'accord avec Davide sur ce point, je veux juste ajouter que vous devriez également envisager d'utiliser les modèles POCO pour générer des objets poco et ne pas renvoyer les objets du cadre d'entité à une autre couche, car cela met alors une dépendance sur le cadre d'entité.
Si vous n'en faites pas un projet distinct, votre code d'accès direct aux données finira inévitablement par être intégré à votre code Web. Je vois cela tout le temps (et nous avons tous été coupables de cela à un moment donné).
Je ne pense pas que cela ait beaucoup d'importance.
J'utilise CodeFirst, donc ma classe DbContext va dans le dossier Model.
En réalité, l'EDMX n'est là que pour la génération du code, au-delà de cela, il ne fait pas grand-chose, il n'est pas déployé/publié sur votre serveur, etc. L'endroit où il se trouve n'est donc pas important. Vous pouvez créer un autre dossier pour l'EDMX si vous voulez, ou le mettre dans Model comme vous l'avez demandé.