В моем веб-приложении мы используем DbContext для каждого запроса.Мы создаем DbContext в Application_BeginRequest (), сохраняем его в HttpContext.Items, а затем вызываем Dispose для него в Application_EndRequest ().
Мы делаем текущий контекст доступным через свойство класса обертки DatabaseContext.Current.
Спорадически при выполнении запроса к этому контексту базы данных мы получаем следующее исключение:
«Экземпляр ObjectContext был удален и больше не может использоваться для операций, требующих подключения».
Я искал в нашем коде любую возможность, которую мы вызываем Dispose в контексте в другом месте ... мы не являемся.
Запрос, который обычно терпит неудачу, таков:
var user = (from u in DatabaseContext.Current.Users
where u.UserName == username
select u).FirstOrDefault();
return user != null;
Все, о чем я могу думать, это то, что глубоко в недрах EF он хранит ссылку на DbContext в кэшированном запросе.планировать и затем пытаться повторно использовать этот контекст при выполнении запроса.Я посмотрел на него через рефлектор, и кажется, что некоторые из внутренних элементов хранят ссылку на ObjectContext.
Есть ли способ отключить кэширование запросов linq?У кого-нибудь есть какие-либо подсказки?
Другая возможность состоит в том, что запрос от предыдущего вызова в контексте оставляет контекст в плохом состоянии.Тем не менее, нет никаких признаков отказов, которые указали бы на это.
Это Entity Framework 4.1, использующая Sql CE (сейчас мы скоро перейдем к производственному экземпляру SQL Server).