Je sais que cette question n'est pas récente, mais je vais quand même poster ma réponse, car je pense que quelqu'un pourra la trouver utile.
Comme probablement beaucoup d'autres, j'ai suivi les étapes mentionnées dans la réponse acceptée. Yay, ça marche. CEPENDANT, mais il y a un problème :
Méthodes BeginRequest() et EndRequest() se déclenchent à chaque fois qu'une demande est faite mais pas seulement pour les pages aspx, mais pour TOUT LE CONTENU STATIQUE ! Cela dit, si vous utilisez le code mentionné ci-dessus et que vous avez sur votre page disons 30 images, vous ré-instanciez votre dbcontext 30 fois !
La solution pour cela est d'utiliser une classe de recouvrement pour récupérer le contexte, quelque chose comme ceci :
internal static class ContextPerRequest
{
internal static DB1Entities Current
{
get
{
if (!HttpContext.Current.Items.Contains("myContext"))
{
HttpContext.Current.Items.Add("myContext", new DB1Entities());
}
return HttpContext.Current.Items["myContext"] as DB1Entities;
}
}
}
Et ensuite pour disposer
protected void Application_EndRequest(object sender, EventArgs e)
{
var entityContext = HttpContext.Current.Items["myContext"] as DB1Entities;
if (entityContext != null)
entityContext.Dispose();
}
Cette modification permet de s'assurer que vous n'instanciez et ne disposiez de votre contexte qu'une seule fois par demande et uniquement lorsque cela est nécessaire. La réponse sélectionnée instancie le contexte à chaque fois.
Note : DB1Entities est dérivé de DbContext (généré par VS). Vous voudrez probablement le modifier avec votre nom de contexte ;)
Note 2 : dans cet exemple, je travaille avec un seul dbcontext. Si vous devez travailler avec plusieurs, vous devrez modifier ce code en fonction de vos besoins. Ne prenez pas cela comme une solution ultime aux problèmes du monde, car ce n'est certainement pas un produit final. Il s'agit simplement de donner un aperçu de la manière dont on peut y parvenir très facilement.
Note 3 : La même approche peut être utilisée dans d'autres situations, par exemple lorsque vous souhaitez partager une instance de SqlConnection ou tout autre... Cette solution n'est pas exclusive à l'objet DbContext, ni à Entity framework.