Il y a eu beaucoup de questions sur la gestion de la durée de vie EntityContext ,
Par exemple, instancier un contexte dans LINQ aux entités
Je suis parvenu à la conclusion que le contexte de l’entité devrait être considéré comme une unité de travail et donc ne pas être réutilisé Génial.
Mais tout en faisant des recherches pour accélérer l’access à ma firebase database, j’ai rencontré ce blog…
Améliorer les performances du framework d’entité
L’article écrit que les performances médiocres des EF par rapport à d’autres frameworks sont souvent dues à la création de l’ object EntityConnection chaque fois qu’un nouvel object EntityContext est nécessaire.
Pour tester cela, j’ai créé manuellement un EntityConnection statique dans Global.asax.cs Application_Start ().
J’ai ensuite converti tout mon contexte à l’ aide d’ instructions en
using( MyObjContext currContext = new MyObjeContext(globalStaticEFConnection) { .... }
Autant que je sache, cela semble avoir accéléré un peu les choses.
Mais est-ce sécuritaire?
L’utilisation d’une entité EntityConnection statique à l’ échelle de l’application introduit-elle des conditions de concurrence ?
Cordialement, Kervin
EntityConnection est documenté pour ne pas être thread-safe . Je pense que vous pouvez les regrouper, mais vous ne pouvez pas utiliser une seule connexion statique pour une application Web, car de nombreux threads seront impliqués.
Si votre contexte EF est à l’échelle de l’application, considérez que l’utilisateur A a apporté des modifications (non validées) et que l’utilisateur B a validé ses modifications, toutes les modifications seront validées dans la firebase database car les utilisateurs A et B utilisent la même instance.
Dans mon projet, j’ai réalisé une parsing WebRequest du contexte EF – c’est-à-dire. un object de contexte est statique du début à la fin d’une requête Web et toutes les opérations de cette requête fonctionnent dans le même contexte EF. Cela a considérablement accéléré mon traitement sans le problème mentionné ci-dessus.
Une façon d’implémenter cela consiste à utiliser un conteneur DI (j’utilise Unity) pour gérer la durée de vie du contexte EF. Le gestionnaire à vie des requêtes Web n’est pas fourni dans Unity, mais il existe une multitude d’articles qui montrent comment cela peut être fait.
HTH.