代码之家  ›  专栏  ›  技术社区  ›  Graham Conzett

在实体框架中快速加载在复杂查询中失败

  •  1
  • Graham Conzett  · 技术社区  · 16 年前

    执行以下查询时,无法加载表:

    IEnumerable<Bookmark> tempBookmarks = ListBookmarksByUserID(userID);
    IEnumerable<CandidateWithBookmarks> results = (from c in _internshipEntities.CandidateSet
                                                .Include("education")
                                                .Include("progress")
                                                .Include("contacts")
                                                .Include("availability")
                                                .Include("hosttypes")
                                                .Include("hostsizes")
                                                .Include("hostcapacities")
                                                .Include("hoststates")
                                                .Include("users")
                           join b in tempBookmarks on c.ID equals b.candidates.ID
                           select new CandidateWithBookmarks()
                                      {CandidateObject = c, BookmarkObject = b});
    return results;
    

    Alex James' article "How to make Include really Include" . 解决方案附带一个警告:

    要使其工作,您的最终选择必须是实体,即选择post而不是select new{}

    这显然是上述代码块的一个问题。对于这个问题,是否有其他已知的解决方法不会破坏快速加载?

    1 回复  |  直到 16 年前
        1
  •  2
  •   Graham Conzett    16 年前

    我想我已经解决了这个问题,但它可能只适用于这个特定的实例,通过在连接之后移动include,查询似乎可以工作:

    IEnumerable<CandidateWithBookmarks> results = (
        from b in tempBookmarks
        join c in _internshipEntities.CandidateSet
                                     .Include("education")
                                     .Include("progress")
                                     .Include("contacts")
                                     .Include("availability")
                                     .Include("hosttypes")
                                     .Include("hostsizes")
                                     .Include("hostcapacities")
                                     .Include("hoststates")
                                     .Include("users")
        on b.candidates.ID equals c.ID
        select new CandidateWithBookmarks(){CandidateObject = c, BookmarkObject = b});
    

    编辑:我的另一个类似于此的查询也需要外部连接,这会产生一些问题,因为它会影响您连接的内容,这与本例不同,但它仍然是可行的。