Не удается получить доступ к объекту данных после удаления, даже если это список - PullRequest
1 голос
/ 24 декабря 2011

Я получаю эту ошибку:

Невозможно получить доступ к удаленному объекту.
Имя объекта: 'DataContext, доступный после Dispose.'.

Для этого кода:

...
ViewData["AdSlots"] = dbc.AdSlots.Where(a => a.PublisherId == publisherId).ToList();
dbc.Dispose();

Когда я использую этот код для представления:

grid.Column(header: "Ad Size", style: "ad-size", format: @<text>@item.AdSize.Width x @item.AdSize.Height</text>),

Это в MVC3, кстати.

Кто-нибудь знает, почему это происходит?Разве он не должен храниться в памяти и работать или мне нужно явно указать то, что я хочу, чтобы ассоциации также сохранялись?

Спасибо

Ответы [ 2 ]

5 голосов
/ 24 декабря 2011

Проблема в том, что вы запрашиваете у базы данных AdSolts и утилизируете ее сразу после этого. Затем, по вашему мнению, ваш код пытается получить доступ к AdSize , который снова пытается получить доступ к базе данных, но благодаря ленивой загрузке Linq-to-SQL AdSize не был загружен в первый раз, и поскольку контекст данных выбрасывает это исключение.

Вы можете решить свою проблему, используя DataLoadOptions .

List<AdSlot> list;
using(var dbc = new DbDataContext())
{
    var loadOptions = new DataLoadOptions();
    loadOptions.LoadWith<AdSlot>(n => n.AdSize);
    dbc.LoadOptions = loadOptions;

    list = dbc.AdSlots.Where(a => a.PublisherId == publisherId).ToList();
}

ViewData["AdSlots"] = list;
1 голос
/ 06 января 2012

так что теперь мне интересно, что произойдет, если вы оставите тот же код, что и Epignosisx, но удалите loadoptions?так как вы помещаете список в новую переменную?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...