Entity Framework, DBContext et en utilisant() + asynchrone?

Il y a une chose qui m'énerve depuis longtemps à propos de l'Entity Framework.

L'année dernière, j'ai écrit une grosse application pour un client à l'aide de EF. Et pendant le développement de tout fonctionnait très bien.

Nous avons expédié le système en août. Mais après quelques semaines, j'ai commencé à voir bizarre fuites de mémoire sur la production-serveur. Mon ASP.NET MVC 4 processus a été la prise de toutes les ressources de la machine après une couple de jours de course (8 GO). Ce n'était pas bon. J'ai chercher partout sur le net et vu que vous devriez vous entourer de toutes vos EF les requêtes et les opérations dans un using() bloc de sorte que le contexte peut être éliminé.

Dans un jour, j'ai refait tout mon code pour utiliser using() et cela a résolu mon problème, depuis lors, le processus repose sur une constante de l'utilisation de la mémoire.

La raison pour laquelle je n'ai pas l'entourer de mes requêtes, en premier lieu, cependant, c'est que j'ai commencé mes premiers contrôleurs et les dépôts à partir de Microsoft propres échafaudages inclus dans Visual Studio, ils n'ont pas l'entourent de requêtes à l'aide, au lieu de cela, il avait le DbContext comme une variable d'instance du contrôleur lui-même.

Tout d'abord: si c'est vraiment important de disposer du contexte (quelque chose qui ne serait pas étrange, le dbconnection doit être fermé, et ainsi de suite), Microsoft devrait peut-être avoir ce dans tous leurs exemples!

Maintenant, j'ai commencé à travailler sur un nouveau gros projet avec toutes mes connaissances acquises à l'arrière de ma tête et j'ai été essayer les nouvelles fonctionnalités de .NET 4.5 et EF 6 async et await. EF 6.0 a toutes ces méthodes asynchrones (e.g SaveChangesAsync, ToListAsync, et ainsi de suite).

public Task<tblLanguage> Post(tblLanguage language)
{
    using (var langRepo = new TblLanguageRepository(new Entities()))
    {
        return langRepo.Add(RequestOrganizationTypeEnum, language);
    }
}

Dans la classe TblLanguageRepo:

public async Task<tblLanguage> Add(OrganizationTypeEnum requestOrganizationTypeEnum, tblLanguage language)
{
    ...
    await Context.SaveChangesAsync();
    return langaugeDb;
}

Cependant, quand je suis présent tout autour de mes déclarations dans un using() bloc-je obtenir de l'exception, DbContext was disposed, avant que la requête a été en mesure de revenir. Ce comportement est normal. L'exécution de la requête asynchrone et le using bloc est terminé devant de la requête. Mais comment dois-je disposer de mes contexte d'une manière appropriée lors de l'utilisation du async et await fonctions de ef 6??

Merci de me pointer dans la bonne direction.

Est using() nécessaires en EF 6? Pourquoi Microsoft exemples ne jamais fonctionnalité? Comment utilisez-vous async fonctionnalités et de les éliminer de votre contexte correctement?