![](/img/trans.png)
[英]Entity Framework - filtering and retrieving child entities on child entity condition
[英]“Where” clause in Entity Framework not retrieving child entities
这是交易。
我的模型中有两个相关的表。 我们将name'em: reports
和subReports
。
提到这一点非常重要,因为我目前不知道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
。
你知道发生了什么吗?
先感谢您 :)
您是否尝试过这些技术中的任何一种?
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.