Похоже, это происходит со мной, когда я пытаюсь получить доступ к свойству, которое не является одним из столбцов таблицы базы данных, из которой получен объект.
Например, возможно, в вашей базе данных есть таблица 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
.