我有以下代码:
var carsContext = new CarsDataContext();
IQueryable<Car> allCars = carsContext.Cars;
foreach (var car in allCars)
Console.WriteLine(car.Color);
我想要的是每个汽车对象都要知道用于检索它的原始datacontext,以便我可以使用如下的辅助方法来装饰它:
foreach (var car in allCars)
Console.WriteLine(car.GetOwner().Lastname);
使用GetOwner()方法能够自动重用下一个数据库的原始datacontext,而现在我必须做一些丑陋才能获得同样的效果:
foreach (var car in allCars)
{
car.SetDataContext(carsContext);
Console.WriteLine(car.GetOwner().Lastname);
}
这些信息是否已经可用于对象,或者我是否应该尝试制作一个自定义的IQueryable实现,当从集合中检索对象时,该实现会自动为我分配这些信息?
我正在尝试这样做,因为出于性能原因,我希望保留针对数据库的表达式的延迟评估作为SQL(我有大型数据集)。
感谢任何建议,谢谢。
编辑:这是简化的示例,例如,对原始数据上下文的引用不一定立即可用。
答案 0 :(得分:2)
你在使用EF吗?您最初获得汽车实体时可以执行.Include(c =&gt; c.Owner)。延迟加载已保留,但现在您将获得所有者实体以及Car。此外,它可以提高性能,因为您正在进行1次连接查询,而不是为每个汽车实例返回数据库100次。