2012-02-07 5 views
5

Je cherche la solution du problème que je suis et probablement beaucoup doivent être confrontés.Partager un modèle entre plusieurs fichiers edmx (Entity Framework 4.0)

Actuellement, je travaille sur une application contenant près de 400 tables. L'application se compose de sept projets de bibliothèque de classes (StudentInfo, bibliothèque, frais etc.) et chacun a son propre fichier .edmx (constitué de 50 tables) avec stratégie de génération de code = default Et un seul projet d'application Web qui référence les projets de la bibliothèque de classes .
Il y a environ 15 tables qui sont communes et seront présentes dans le fichier .edmx dans chaque projet de bibliothèque de classes. L'espace de noms des classes/modèles est le même (Campus) dans tous les fichiers .edmx.

J'ai créé une classe partielle à savoir School (qui est l'un des commom table/modèle) qui contient quelques méthodes.

Cependant l'erreur de compilation suivante est lancée Le type 'Campus.School' existe dans 'D: \ projet \ Campus \ CampusStudent \' et « D: \ projet \ Campus \ CampusLibrary \ bin \ Debug \ CampusLibrary.dll '

Les solutions suggérées par les autres membres
1) Disposez d'espaces de noms distincts pour chacun des fichiers .edmx.
2) Utilisez des noms différents pour les modèles à savoir StudentSchool, LibrarySchool, etc.
Les deux solutions vont me forcer à dupliquer les classes communes avec ses méthodes dans chacun des projets de la bibliothèque de classes. Quelqu'un peut-il m'aider?

+0

Je suppose que la question se pose de savoir si vous avez vraiment besoin de ces 15 tables présentes dans tous les fichiers edmx. Ne pouvez-vous pas scinder les modèles logiquement afin d'éliminer la redondance? –

Répondre

6

Il peut y avoir un moyen si vous utilisez le modèle POCO T4 pour la génération d'entité actuelle. POCOs dans EF peut être n'importe quelle classe dans n'importe quel espace de noms qui ont le même nom que l'entité dans EDMX et qui ont toutes les propriétés avec le même nom comme entité dans EDMX (y compris les mêmes types et accessibilités pour les getters et setters).

Définissez vos 15 classes partagées dans un autre assemblage (vous devez respecter les règles POCO mentionnées) et référencez-les dans tous les projets de bibliothèque. Une fois que vous avez cet assemblage, créez votre propre version du modèle POCO T4 qui ne créera pas de nouveaux fichiers de classe pour ces entités partagées et utilisera à la place des classes provenant de l'assembly référencé.

L'autre option est la création manuelle et la maintenance de toutes ces 400 classes et types de contexte EF. C'est ce que vous ferez si vous n'utilisez que le mapping de code (alias code-first) et vous n'aurez pas ces problèmes.

+0

Merci pour votre réponse. Je vais essayer de l'implémenter. –

+0

Cher Ladislav, Avez-vous un exemple d'application ou un lien vers une ressource qui peut m'aider à l'implémenter? En fait, je suis incapable d'appliquer votre suggestion à la création de modèle POCO T4 ** qui ne créera pas de nouveaux fichiers de classe pour ces entités partagées et utiliser plutôt des classes de l'assembly référencé ** car je ne suis pas très compétent dans EF –

+0

Je suis désolé, je Je n'ai pas d'exemple. Vous avez juste besoin de créer une collection statique de noms d'entités qui ne doit pas être créée. Cette collection sera définie directement dans le modèle. Dans la partie du gabarit qui génère le code pour les entités, le nom de l'entité n'est pas présent dans la collection. Vous devrez également modifier le code pour générer des propriétés de navigation dans d'autres entités afin d'utiliser le type correct à partir de l'assembly référencé. –

Questions connexes