2015-10-19 3 views
0

Попытка исправить эту ошибкуSystem.ObjectDisposedException при попытке перечислить объект

public ActionResult MyEvents() 
{ 
    Personne personne = (Personne)Session["User"]; 
     personne.Evenements.ToList(); 
     return View(personne); 

} 

Получили System.ObjectDisposedException и Evenements является нулевым

Используя многие ко многим отношения между Personne и Evenement поэтому не может читать join table в db.

+0

Пожалуйста, включите все соответствующие части кода в свой вопрос, а также трассировку стека, чтобы стало легче найти причину вашей проблемы. – Fabjan

+0

Я предполагаю, что это контекст базы данных, который был удален, и вы используете ленивую загрузку? Но невозможно сказать без полной ошибки. – DavidG

+0

Ummm, вы сохраняете объект в сеансе, а затем вы извлекаете его в методе контроллера из сеанса? Не делайте этого, храните идентификатор пользователя в сеансе и, возможно, оберните сессионные getters/seters также в какой-то другой класс, а не напрямую обращайтесь к сеансу. Затем получите «персону» из контекста и с нетерпением загружайте «выравнивания», включив их. Вы можете кэшировать материал в сеансе, но вы не должны хранить объекты там. –

ответ

0

Проблема в том, что Evenements, вероятно, загружаются с использованием ленивой загрузки (т. Е. Не извлекаются до тех пор, пока не будут доступны свойства).

Когда вы кодируете веб-приложения, соединение, используемое для извлечения информации, обычно закрывается при завершении HTTP-запроса.

Таким образом, когда вы на втором запросе попытаетесь получить доступ к объекту Evenements, соединение было закрыто. И вы получите ObjectDisposedException.

Вы можете активировать жадную загрузку с помощью метода Include: http://www.entityframeworktutorial.net/EntityFramework4.3/eager-loading-with-dbcontext.aspx

Таким образом, имущество было загружено и храниться для всех будущих запросов.

Смежные вопросы