Было много связанных вопросов, но никто не решал мою проблему. Моя цель - генерировать pdf-файл, используя Razor PDF. Итак, у меня есть действие контроллера, которое содержит;Экземпляр ObjectContext был удален при использовании объекта во взгляде
var pdf = new PdfResult(null, "myView");
ViewBag.VrList = MyDbQuery.GetExpiredVL(DateTime.Today);
return pdf;
MyDbQuery - это другое решение, которое я использую. И у меня есть этот метод:
public static List<VLEntity> GetExpiredVL(DateTime ReportDate)
{
using (MyDbContext db = new MyDbContext())
{
return db.VLEntity.Where(vl => vl.ValidTo.Month == ReportDate.Month && vl.ValidTo.Year == ReportDate.Year).ToList();
}
}
мой взгляд выглядит следующим образом:
@foreach (var vrRow in ViewBag.VrList)
{
@vrRow.VEntity.VssId
}
Когда я отладки, я получаю:
System.ObjectDisposedException: Экземпляр ObjectContext были захоронены и больше не может использоваться для операций, требующих подключения.
В подобных вопросах, которые я нашел здесь, говорится в заявлении using
. Но вы можете видеть здесь, я уже использовал это. Я очень новичок в ASP.NET и C# вообще, и я буду признателен, если вы придумаете решение для этого.
Объекты в вашем списке принадлежат MyDbContext, которые вы удаляете, как только возвращается список. Вы хотите использовать что-то вроде контейнера IoC, который имеет семантику продолжительности жизни по запросу. Альтернативно отключите ленивую загрузку или включите соответствующие объекты, которые вам нужны. –
@ ta.speot.is, но есть вызов ToList(), который должен извлекать результаты из 'DbContext' в память. Считаете ли вы, что ленивая загрузка по-прежнему остается проблемой? –
В какой строке выбрано исключение? Как вы используете 'VrList'? Если вы вызываете любые свойства Lazy на нем, вам понадобится 'DbContext', чтобы каким-то образом получить эти данные. –