【问题标题】:Listing entities pointed by foreign keys in Entity Framework列出实体框架中外键指向的实体
【发布时间】:2012-11-09 22:57:01
【问题描述】:

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

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

如何在 Entity Framework 中使用 1 db 查询执行此操作? 我从一开始就知道我需要照片。

我现在的代码如下所示:

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

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

【问题讨论】:

  • "我认为,EF 会为每辆车单独进行数据库查询。"你为什么这么认为?还是你的意思是每辆车的照片?
  • 假设 D -fk-> C -fk-> B -fk-> A. 如果我列出 EF 中的所有 AEntities,我可能不想列出所有指向任何 A 的 BE,所有 CE 指向任何...所以我认为EF会在需要时从数据库数据中获取,这将是当我调用A.Bs ar A.Bs.First().Cs 或类似这样的时候。

标签: c# database performance entity-framework


【解决方案1】:

您可以在查询 Cars 时告诉 Entity Framework 在 include Photos 中。

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

【讨论】:

    【解决方案2】:

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

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

    编辑:这就是原因...Entity Framework Include() is not working

    【讨论】:

    • 谢谢,我试试看明天给你反馈。
    【解决方案3】:

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

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

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

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

    【讨论】:

    • 我不想为此创建假课程。我想使用 EF 功能来处理我所拥有的一切。否则它不适用于更复杂的用法。
    • 其他答案也可以。我已经编辑了我的答案,以说明为什么其他人可能会使用我的方法。
    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多