Я знаю, что это не недавний вопрос, но я все равно опубликую свой ответ, потому что я считаю, что кто-то может найти его полезным.
Как и многие другие, я следовал шагам, упомянутым в принятом ответе.Да, это работает. ОДНАКО , есть одна загвоздка:
Методы BeginRequest () и EndRequest () запускаются каждый раз, когда делается запрос , но не только для страниц aspx, но и для ВСЕХСТАТИЧЕСКИЙ КОНТЕНТ!Тем не менее, если вы используете код, упомянутый выше, и у вас есть на странице, скажем, 30 изображений, вы 30 раз восстанавливаете свой dbcontext!
Решением для этого является использование класса обертки для извлеченияконтекст, что-то вроде этого:
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;
}
}
}
И затем для утилизации
protected void Application_EndRequest(object sender, EventArgs e)
{
var entityContext = HttpContext.Current.Items["myContext"] as DB1Entities;
if (entityContext != null)
entityContext.Dispose();
}
Эта модификация гарантирует, что вы создаете и утилизируете свой контекст только один раз за запрос и только при необходимости.Выбранный ответ создает экземпляр контекста каждый раз.
Примечание: DB1Entities является производным от DbContext (генерируется VS).Вы, вероятно, захотите изменить его своим контекстным именем;)
Примечание 2: в этом примере я работаю только с одним dbcontext.Если вам нужно работать с несколькими, вам нужно будет изменить этот код в соответствии с вашими потребностями.Не принимайте это как какое-то окончательное решение мировых проблем, потому что это, конечно, не конечный продукт.Он предназначен только для того, чтобы дать подсказку, как это может быть достигнуто очень простым способом.
Примечание 3: Тот же подход можно использовать и в других ситуациях, например, когда выхотел бы поделиться экземпляром SqlConnection или любым другим ... Это решение не является эксклюзивным ни для объекта DbContext, ни для структуры Entity.