0

Я получаю исключение «Object Disposed», потому что передаю результат запроса Linq как IEnumerable в представление, но linq запускается внутри блока, который окружает контекст db. Каков наилучший способ разрешить это, предпочтительнее избегать дополнительного котельного соединения?MVC View с IEnumerable <T> модель взята из Linq To Entities - объектная ошибка

Я получил это в контроллере, обратите внимание, используя блок который распоряжается запрос Linq, я думаю:

HomeViewModel модель = новый HomeViewModel();

using (var ctx = new MyContext()) 
{ 
    model.StuffList = (from p in ctx.Stuffs orderby p.ModifiedDate descending select p).Take(10); 
} 

Внутри зрения у меня есть:

@model IEnumerable<Stuff> 

Он падает с исключением «Объект» УТИЛИЗИРОВАТЬСЯ, когда он начинает рендеринг вида. WCS Я могу создать отдельный список для viewmodel и скопировать результаты, но я хочу, если это возможно, избежать дополнительного покрытия котла.

Спасибо!

+2

Добавьте '.ToList()' к вашему запросу, чтобы реализовать его. –

+0

Работало. Это и изменение бит в @model List . Ta. – Paceman

ответ

0

LINQ и другие структуры, связанные с доступом к данным, возвратят вам IEnumerable в качестве контракта. Преимущество состоит в том, что данные не нужно получать в этот самый момент. LINQ по-прежнему контролирует, как и когда он хочет запросить ваши данные. Например: если вы применяете только .Count() к перечислимому объекту, linq может запрашивать только базу данных с помощью оператора подсчета sql.

Данное поведение не дает вам возможности явно извлекать данные для закрытия любого db-контекста, веб-запроса или везде, откуда приходит ваш IEnumerable <>.

.ToList() подходит для принудительного распределения результата.