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:

  1. Quelle est la bonne façon de l'utilisation de DBcontext variable?
  2. 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.
InformationsquelleAutor Pal | 2013-07-30