LINQ to SQL中的ObjectDisposedException对实体从来没有要求(LINQ

2019-10-30 11:35发布

我有这种奇怪的行为。 林加载在一个List <一些实体>和附加到一个网格。 当双击网格我把投行对实体和附加到一个属性。

我在我的数据库和代码改变了一些东西,现在我得到这个例外,而我从来没有想查这个实体引用的东西。

有任何想法吗?

Answer 1:

这似乎发生在我身上时,我尝试访问一个属性,它不是实体源自对数据库表中的一列。

比如,也许你的数据库有一个表Vehicle的列IdYearMakeModelEngineId 。 该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



文章来源: LINQ to SQL ObjectDisposedException on entity that never asked for