Question

Il y a eu de nombreuses questions sur la gestion de EntityContext durée de vie,

par exemple. instanciation un contexte LINQ to Entities

Je suis venu à la conclusion que le contexte de l'entité doit être considérée comme une unité de travail et par conséquent pas réutilisé. Grand.

Mais tout en faisant des recherches pour accélérer mon accès à la base, je suis tombé sur ce blog ...

Améliorer Entity Framework Performance

Le poste fait valoir que la performance efs faible par rapport à d'autres cadres est souvent dû à la EntityConnection objet créé à chaque fois une nouvelle EntityContext objet est nécessaire.

Pour tester cela, je crée manuellement un EntityConnection statique dans Global.asax.cs Application_Start ().

Je puis converti tout mon contexte avec déclarations à

using( MyObjContext currContext = new MyObjeContext(globalStaticEFConnection)
{
   ....
}

Cela semble avoir des choses accéléra un peu sans erreurs jusqu'à ce que je peux dire.

Mais est-ce sécuritaire?

Le fait d'utiliser une statique applicationwide EntityConnection introduire des conditions de course?

Cordialement, Kervin

Était-ce utile?

La solution

EntityConnection est documentée à ne pas thread-safe . Je pense que vous pouvez les mettre en commun, mais vous ne pouvez pas utiliser une connexion statique unique, pour une application Web, car il y aura beaucoup de discussions en jeu.

Autres conseils

  • Si votre contexte EF est une application à l'échelle, considérer qu'un utilisateur a apporté des changements (non engagés) et l'utilisateur B a engagé ses changements, tous les changements seront engagés à la base de données puisque les deux utilisateurs A et B utiliser la même instance

  • Dans mon projet, je l'ai fait un par WebRequest intance du contexte EF - à savoir. un objet de contexte est statique du début jusqu'à la fin d'une requête Web et toutes les opérations dans ce travail de demande avec le même contexte EF. Cela a considérablement accéléré mon traitement sans problème mentionné ci-dessus.

Une façon de mettre en œuvre est d'utiliser un conteneur de DI (J'utilise l'unité) pour gérer la durée de vie du contexte EF. La demande par web gestionnaire de vie n'est pas donné hors de la boîte à l'unité, mais il y a des tonnes d'articles là-bas qui montrent comment cela peut se faire.

HTH.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top