繁体   English   中英

Entity Framework中的“ Where”子句未检索子实体

[英]“Where” clause in Entity Framework not retrieving child entities

这是交易。

我的模型中有两个相关的表。 我们将name'em: reportssubReports

提到这一点非常重要,因为我目前不知道reportId的报告的reportId ,因此我需要使用一些参数来查找它。 好的,因此,如果我需要通过EntityFramework查询reports一个元素,请执行以下操作:

reports myReport = context.reports.Where(r=> r.startYear.Equals(2014) && r.endYear.Equals(2015) && r.reportCategoryId.Equals(1)).SingleOrDefault();

此行将检索与信息匹配的唯一报告。

但这就是问题所在。 如果我要访问myReport应该具有的subReports集合,那么事实证明该集合为空。 这是我的问题,我不知道为什么。 我的表正确相关。

如果我这样更改查询,那就很奇怪了:

reports myReport = context.reports.Where(r=> r.reportId.Equals(1)).SingleOrDefault();

已加载相关实体,并且集合具有其应具有的子报表。 看到不同? 我必须传递reportId ,但这不是我所需要的,因为正如我已经告诉您的那样,我不知道reportId

你知道发生了什么吗?

先感谢您 :)

您是否尝试过这些技术中的任何一种?

这是从有关急切加载的MSDN页面上获得的

using (var context = new BloggingContext()) 
{ 
    // Load all blogs and related posts 
    var blogs1 = context.Blogs 
                          .Include(b => b.Posts) 
                          .ToList(); 

    // Load one blogs and its related posts 
    var blog1 = context.Blogs 
                        .Where(b => b.Name == "ADO.NET Blog") 
                        .Include(b => b.Posts) 
                        .FirstOrDefault(); 

    // Load all blogs and related posts  
    // using a string to specify the relationship 
    var blogs2 = context.Blogs 
                          .Include("Posts") 
                          .ToList(); 

    // Load one blog and its related posts  
    // using a string to specify the relationship 
    var blog2 = context.Blogs 
                        .Where(b => b.Name == "ADO.NET Blog") 
                        .Include("Posts") 
                        .FirstOrDefault(); 
}


关于懒惰和渴望加载的一些评论

通常,我倾向于在没有延迟加载的情况下工作。 我想知道何时加载我的实体,何时不加载(渴望加载)。

延迟加载可以关闭

  • 完全通过在DbContext上设置相应的属性:

    this.Configuration.LazyLoadingEnabled = false;

  • 导航属性未标记为虚拟时用于特定实体。 有关更多信息,请参见链接的MSDN文章。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM