EF (entity framework) d'utilisation de “l'aide” de la déclaration
J'ai un projet sur MVC. Nous avons choisi EF pour nos transactions DB. Nous avons créé plusieurs gestionnaires pour la couche BLL. J'ai trouvé beaucoup d'exemples, où "using
" l'instruction est utilisée, c'est à dire
public Item GetItem(long itemId)
{
using (var db = new MyEntities())
{
return db.Items.Where(it => it.ItemId == itemId && !it.IsDeleted).FirstOrDefault();
}
}
Ici, nous créons une nouvelle instance de DBcontext MyEntities()
.
Nous à l'aide de "using
" afin de "assurer l'utilisation correcte des IDisposable objets."
C'est seulement une méthode dans mon manager. Mais je n'ai plus que dix d'entre eux.
Chaque fois que j'appelle une méthode quelconque de la part du gestionnaire, je vais utiliser "using
" déclaration et de créer un autre DBcontext dans la mémoire. Quand le garbage collector (GC) débarrasser d'eux? Personne ne sait?
Mais il est dans l'alternative de l'utilisation des méthodes du gestionnaire.
Nous créons une variable globale:
private readonly MyEntities db = new MyEntities();
et l'utilisation DBcontext dans chaque méthode sans "using
" instruction. Et la méthode ressemble à ceci:
public Item GetItem(long itemId)
{
return db.Items.Where(it => it.ItemId == itemId && !it.IsDeleted).FirstOrDefault();
}
Questions:
- Quelle est la bonne façon de l'utilisation de DBcontext variable?
- Que si nous n'aurions pas utiliser "
usage
" énoncé (parce qu'il affecte la performance) - GC fera tout pour que?
Je suis un "rookie" en EF utilisation et je n'ai toujours pas trouvé la réponse sans équivoque à cette question.
- Dépend dans quelle mesure vous voulez le prendre. Idéalement, vous ne serait pas l'instancier dans votre contrôleur à tous mais au lieu de Injecter il (Cio/DI) de cette façon, tout ce qui est appel contrôleur (Usine) peut déterminer la durée de vie de Contexte.
- Pourquoi est-il affecter les performances? Avez-vous mesuré, et a conclu que votre perte de performance? Et le GC n'est pas de l'élimination, vous êtes le disposer vous-même puisque vous êtes en utilisant l'aide-états.
Vous devez vous connecter pour publier un commentaire.
Je pense que vous trouverez de nombreux ce qui suggère ce style de modèle. Pas juste moi ou Henk
DBContext manutention
Pour certains conseils relatifs à la performance, bien intéressant à lire
using
, que de ré-utiliser le même objet?using
, eh bien, il peut être si il a empêché une fuite de mémoire. Mais le point est, c'est fait pour stabililty. Vous éviter des problèmes.La bonne ou la meilleure façon pratique de l'utilisation de DBContext variable est avec l'Aide de.
L'avantage est que beaucoup de choses sont faites automatiquement pour nous. Par exemple, une fois le bloc de code est complété de l'dispose est appelé.
Par MSDN EF de Travail avec DbContext