Linq to sql 从未请求的实体上的LINQ到SQL ObjectDisposedException

Linq to sql 从未请求的实体上的LINQ到SQL ObjectDisposedException,linq-to-sql,c#-3.0,Linq To Sql,C# 3.0,我有这种奇怪的行为。我正在列表中加载一些实体并附加到网格中。 双击网格时,我将行转换为实体并附加到属性 我已经更改了数据库和代码中的一些内容,现在我得到了这个异常,而我从来不想检查这个实体引用中的某些内容 有什么想法吗?当我试图访问一个属性时,这种情况似乎发生在我身上,该属性不是该实体派生自的数据库表中的列之一 例如,您的数据库可能有一个表Vehicle,其中包含列Id、Year、Make、Model和EngineId。LinqToSql实体将为每个列都有一个属性,但它还添加了一个名为引擎的属性

我有这种奇怪的行为。我正在列表中加载一些实体并附加到网格中。 双击网格时,我将行转换为实体并附加到属性

我已经更改了数据库和代码中的一些内容,现在我得到了这个异常,而我从来不想检查这个实体引用中的某些内容


有什么想法吗?

当我试图访问一个属性时,这种情况似乎发生在我身上,该属性不是该实体派生自的数据库表中的列之一

例如,您的数据库可能有一个表
Vehicle
,其中包含列
Id
Year
Make
Model
EngineId
。LinqToSql实体将为每个列都有一个属性,但它还添加了一个名为
引擎
的属性,该属性包含一个
引擎
实体

如果您将
车辆
数据转换为
列表
,然后尝试访问
引擎
上的某些属性,您将获得
ObjectDisposedException
,除非您的
数据上下文
仍处于活动状态

因此,如果您需要,比如说,
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查询来填充
列表而不是
列表
,那么当您尝试访问
CylinderCount
时,应该停止获取
ObjectDisposedException
,您的解释很难理解。张贴代码将是有益的。