5

我有两个实体,比如说汽车和照片。每张照片都有 Car 的外键,所以每辆车都有自己的照片集。

我想列出一些汽车的子集,对于每辆列出的汽车,我想列出所有的每张照片。

如何在具有 1 db 查询的实体框架中执行此操作?我从一开始就知道我需要照片。

我现在的代码如下所示:

var carList = CarEntities.Where(...).ToList();
foreach(var car in carList){
    var photoList = car.Photos.ToList();
}

我认为,EF 会为每辆车单独进行数据库查询。

4

3 回答 3

6

您可以在查询汽车时告诉实体框架包含照片。

var carList = CarEntities.Include(c => c.Photos).Where(...).ToList();
于 2012-11-21T16:28:47.413 回答
5

ckal 的答案非常接近,除了最后使用 include 否则 EF 可能并不总是包含它(目前无法回忆确切的原因),

var carList = CarEntities.Where(...).Include(c => c.Photos).ToList();

编辑:这就是原因......实体框架包含()不起作用

于 2012-11-21T16:30:48.847 回答
1

“选择新”是您可能想要做的。创建一个名为的新类CarWithPhotos并使用它返回一组结果:

var carWithPhotos = from car in CarEntities
                    where (...) 
                    select new CarWithPhotos(car, car.Photos.ToList());

据我了解,这编译为一个单一的数据库之旅,我认为这就是你所追求的。

编辑: 当我查询的对象很大并且我并不总是想检索整个“汽车”对象时,我使用了这种技术。

于 2012-11-21T16:27:13.733 回答