253 votes

Entity Framework : Une base de données, plusieurs DbContexts. Est-ce une mauvaise idée ?

Mon impression a été qu'un DbContext est censé représenter votre base de données, et donc, si votre application utilise une base de données, vous voulez seulement un DbContext. Cependant, certains de nos collègues veulent briser les domaines fonctionnels en plusieurs DbContext classes. Je crois que cela vient d'un bon endroit -- un désir de garder le code plus propre-mais il semble instable. Mon instinct me dit que c'est une mauvaise idée, mais malheureusement, mon intuition n'est pas une condition suffisante pour une décision de conception.

Donc, je suis à la recherche d'Un) des exemples concrets de quoi cela peut-être une mauvaise idée, ou B) l'assurance que ce sera tout le travail très bien.

197voto

Ladislav Mrnka Points 218632

Vous pouvez avoir plusieurs contextes pour la base de données unique. Il peut être utile, par exemple, si votre base de données contient plusieurs schémas de base de données et que vous souhaitez gérer, en tant que distinct, autonome de la zone.

Le problème, c'est quand vous voulez utiliser le premier code pour créer votre base de données uniquement contexte unique dans votre application peut le faire. L'astuce à ce sujet est habituellement un contexte supplémentaire contenant toutes vos entités qui n'est utilisé que pour la création de base de données. Votre application réelle des contextes contenant uniquement des sous-ensembles de vos entités doivent avoir initialiseur de base de données mis à null.

Il y a d'autres questions que vous verrez lors de l'utilisation de plusieurs types de contexte - par exemple partagé les types d'entités et de leur passage d'un contexte à un autre, etc. En général, il est possible, il peut faire une conception beaucoup plus propre et distincte des différents domaines fonctionnels, mais il a ses frais supplémentaire de complexité.

51voto

Julie Lerman Points 2407

Ce fil juste barboter sur StackOverflow et j'ai donc voulu proposer une autre "B) l'assurance que tout cela va bien" :)

Je suis en train de faire exactement ce par le biais de la DDD Délimitée Contexte motif. J'ai écrit dans mon livre, la Programmation Entity Framework: DbContext et c'est l'objectif de 50 minutes de module dans un délai d'un de mes cours sur Pluralsight -> http://pluralsight.com/training/Courses/TableOfContents/efarchitecture

hth

julie

6voto

Ilan Points 125

Rappel : Si vous n’associez pas plusieurs contextes Assurez-vous que vous coupez coller n toutes les fonctionnalités dans vos divers dans votre seul .

J’ai juste perdu chasse temps pourquoi mes relations de delete cascade n’étaient pas conservées seulement pour découvrir que je n’avais pas porté le modelBuilder.Entity()... WillCascadeOnDelete() ; Code de mon contexte réel dans mon contexte combinée.

4voto

Victor J. Garcia Points 118

Mon petit doigt m'a dit la même chose quand je suis tombé sur cette conception.

Je suis en train de travailler sur une base de code où il y a trois dbContexts à une base de données. 2 des 3 dbcontexts dépendent de l'information à partir de 1 dbcontext parce qu'il sert les données administratives. Cette conception a placé des contraintes sur la façon dont vous pouvez interroger vos données. J'ai rencontré ce problème où vous ne pouvez pas joindre de partout dbcontexts. Au lieu de ce que vous êtes nécessaire à faire est de demander les deux dbcontexts puis faire une jointure dans la mémoire ou de parcourir à la fois pour obtenir la combinaison des deux, comme un jeu de résultats. Le problème c'est qu'au lieu de l'interrogation d'un ensemble de résultats spécifique vous êtes maintenant le chargement de tous vos dossiers dans la mémoire et ensuite de faire une jointure contre les deux ensembles de résultats en mémoire. Il peut vraiment ralentir les choses.

Je voudrais poser la question "juste parce que vous pouvez, si vous?"

Consultez cet article pour le problème que j'ai est venu à travers liée à cette conception. Le spécifiée expression LINQ contient des références à des requêtes qui sont associés à différents contextes

1voto

Daniel Points 825

Dans le code en premier lieu, vous pouvez avoir plusieurs DBContext et qu’une base de données. Il suffit de spécifier la chaîne de connexion dans le constructeur.

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