Gestion de la durée de vie d’EntityConnection

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.