Comment prendre en charge plusieurs modèles de structure d'entité dans la même solution

.net entity-framework orm

Question

J'ai commencé à développer une application utilisant Entity Framework.

Par exemple, j'ai ajouté un espace de noms contenant tout le code de gestion utilisateur MyApp.Users. Ce modèle contient un modèle marqué comme interne à l'espace de noms et n'expose la fonctionnalité qu'au reste du système via des interfaces. C'est tout bon.

Je souhaite maintenant définir un autre espace de noms pour gérer une logique métier spécifique. Je veux qu'il contienne un modèle qui ne connaît qu'un autre sous-ensemble du schéma de base de données, cependant ce sous-ensemble se chevauche sur la table Users. Lorsque j'essaie d'accéder au deuxième modèle du projet principal, j'obtiens cette erreur:

"Un EdmType ne peut pas être mappé plusieurs fois sur des classes CLR"

Je pense que cela ne devrait pas se comporter de cette façon. Après tout, la table utilisateur est référencée par 2 modèles différents dans 2 espaces de noms différents ... Comment VS sait-il même que la table est référencée deux fois?

Quelqu'un a-t-il vu ce problème et peut-être compris comment permettre à la même table d'exister dans différents modèles?

Autre solution: s'agit-il d'une sorte d'anti-modèle Entity Framework que je devrais éviter?

Réponse acceptée

Pour réutiliser des types dans plusieurs modèles, vous devez suivre certaines étapes spécifiques décrites dans cet article de blog . Comme beaucoup de fonctionnalités Entity Framework plus avancées, cela fonctionne, mais ne fonctionne pas très bien avec le concepteur d'interface graphique. Voir aussi ce post d'intro pour plus d'idées sur le traitement de modèles plus grands.


Réponse populaire

Vous pouvez certainement avoir plusieurs modèles, mais ils ne peuvent pas se chevaucher . Le message d'erreur est assez clair - s'ils se chevauchent, comment EF saurait-il quel type de CLR mapper - il n'y a aucun moyen de le dire, vraiment.

Dans votre cas, vous pourriez éventuellement essayer d'extraire la table Users dans un troisième modèle, si elle doit également être utilisée dans deux autres endroits.

Marc



Related

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