导航 属性 未在 Linq 查询语法中实现,延迟加载也不起作用
Navigational Property not materialized in Linq Query Syntax also Lazy Loading didnt work
下面是使用 linq 的连接:
var query = from a in TableA
join b in TableB
on new { a.Id1, a.Id2 } equals new { b.Id1, b.Id2 }
select a;
var entities = query.ToList();
foreach(var item in entities)
{
foreach(var b in item.B)
{
var propValue = b.SomeProperty;
}
}
假设 TableB 具有与 TableA 中的项目匹配的记录。
但是在执行查询后,每个 A 的导航 属性 B 中没有任何值。
此外,当我尝试在内部 foreach 循环中访问它时,它不会向数据库发送请求以加载这些实体(延迟加载)。
我是不是遗漏了什么,或者这是 entity framework 应该工作的方式。
因为在这种情况下,我希望延迟加载能够工作并在访问时加载相关实体。
有没有办法在使用 LINQ 查询语法的同时实现那些导航 属性 而不会失去编写没有子查询的干净 sql 查询的能力。
您不应该加入 LINQ to Entities。而是使用您的导航属性。
var query = from a in TableA.Include(a => a.B)
select a;
下面是使用 linq 的连接:
var query = from a in TableA
join b in TableB
on new { a.Id1, a.Id2 } equals new { b.Id1, b.Id2 }
select a;
var entities = query.ToList();
foreach(var item in entities)
{
foreach(var b in item.B)
{
var propValue = b.SomeProperty;
}
}
假设 TableB 具有与 TableA 中的项目匹配的记录。 但是在执行查询后,每个 A 的导航 属性 B 中没有任何值。
此外,当我尝试在内部 foreach 循环中访问它时,它不会向数据库发送请求以加载这些实体(延迟加载)。
我是不是遗漏了什么,或者这是 entity framework 应该工作的方式。
因为在这种情况下,我希望延迟加载能够工作并在访问时加载相关实体。
有没有办法在使用 LINQ 查询语法的同时实现那些导航 属性 而不会失去编写没有子查询的干净 sql 查询的能力。
您不应该加入 LINQ to Entities。而是使用您的导航属性。
var query = from a in TableA.Include(a => a.B)
select a;