2

我有以下代码:

var carsContext = new CarsDataContext();

IQueryable<Car> allCars = carsContext.Cars;

foreach (var car in allCars) 
    Console.WriteLine(car.Color);

我希望每个汽车对象都知道用于检索它的原始数据上下文,以便我可以使用如下辅助方法来装饰它:

foreach (var car in allCars)
    Console.WriteLine(car.GetOwner().Lastname);

GetOwner() 方法能够自动为下一个数据库重用原始数据上下文,而现在我必须做一些丑陋的事情才能获得相同的效果:

foreach (var car in allCars)
{
    car.SetDataContext(carsContext);
    Console.WriteLine(car.GetOwner().Lastname);
}

这些信息是否已经可供对象使用,或者我应该尝试制作一个自定义 IQueryable 实现,以便在从集合中检索对象时为我自动分配此信息?

我正在尝试这样做,因为出于性能原因(我有大型数据集),我想将针对数据库的表达式的延迟评估保留为 SQL。

任何建议表示赞赏,谢谢。

编辑:这是简化的示例,例如对原始数据上下文的引用不一定立即可用。

4

1 回答 1

2

你用的是EF吗?当您最初获得汽车实体时,您可以执行 .Include(c => c.Owner) 。延迟加载被保留,但现在您将获得 Owner 实体以及 Car。此外,当您执行 1 个连接查询而不是为每个汽车实例返回数据库 100 次时,它可能会提高性能。

于 2012-06-22T16:31:02.283 回答