LINQ to SQL ObjectDisposedException на объекте, который никогда не запрашивал - PullRequest
0 голосов
/ 30 мая 2010

У меня странное поведение. Я загружаю некоторые объекты в список <> и добавляю их в сетку. При двойном щелчке по сетке я беру строку, приведенную к сущности, и добавляю свойство.

Я изменил некоторые вещи в своей базе данных и коде, и теперь я получаю это исключение, хотя я никогда не хотел проверять что-либо в этом справочнике по сущностям.

Есть идеи?

1 Ответ

1 голос
/ 30 мая 2010

Похоже, это происходит со мной, когда я пытаюсь получить доступ к свойству, которое не является одним из столбцов таблицы базы данных, из которой получен объект.

Например, возможно, в вашей базе данных есть таблица Vehicle со столбцами Id, Year, Make, Model и EngineId. У сущности LinqToSql будет свойство для каждого столбца, но также добавляется свойство с именем Engine, которое содержит Engine сущность.

Если вы преобразуете свои данные Vehicle в List<Vehicle>, а затем попытаетесь получить доступ к некоторому свойству на Engine, вы получите ObjectDisposedException, если ваш DataContext все еще активен.

Итак, если вам нужно, скажем, Vehicle.Engine.CylinderCount после того, как вы закончите с DataContext, вам нужно будет создать пользовательский объект, который сглаживает ваши данные, так что вам нужна только одна "точка", чтобы данные, которые вам нужны.

Вы можете написать ViewModel класс, чтобы легко выполнить это. Например:

public class VehicleViewModel
{
    public int Id { get; set; }
    public int Year { get; set; }
    public string Make { get; set; }
    public string Model { get; set; }
    public int EngineId { get; set; }
    public int CylinderCount { get; set; }
}

Теперь, если вы напишите свой запрос LinqToSql, чтобы заполнить List<VehicleViewModel> вместо List<Vehicle>, вы должны прекратить получать ObjectDisposedException при попытке доступа к CylinderCount.

...