【发布时间】:2020-01-17 15:05:41
【问题描述】:
数据库有表机器、轮子、特征。 1个汽车记录包括4个车轮记录和几个特征。在数据库中,它看起来像这样:
我想获取关于汽车的最后 5 个条目,包括一组完整的参数数据和车轮信息。我想在一个请求中获取所有数据。
var result = (from Machines in db.Machines.Where(x => x.param == 2) orderby Machines.ID descending
join wheel in db.Wheels on Machines.ID equals wheel.MachineId
join param in db.Characteristcs on Machines.ID equals param.MachineId
select new { Machines, param, wheel }
).Take(5).ToList();
但它只返回一个车轮记录和一个特征。
【问题讨论】:
-
不要使用连接。在实体之间使用适当的关系并让 ORM 生成连接。这就是它的工作
-
你的模型类代码和实际结果截图是什么?我根据您的屏幕截图和代码创建了一个测试演示,它得到了异常结果。你可以参考下面我的回复。
-
@TiyebM *"在不需要预定义导航规则的情况下创建和执行查询的想法很强大,应该由框架本身解决;不仅仅是包含。`导航属性的想法要强大得多,并且总是比手动连接更受欢迎,尤其是对于在这种情况下表示关系的事物。因为它们不仅仅是支持
Include。在查询中使用时,它们允许 ORM 创建连接,开发人员使用更自然的面向对象方法集中查询逻辑。连接是 RDBMS (SQL) 功能,并且... -
...它们存在于 LINQ 中的唯一原因是因为 LINQ to Objects 需要它们来有效地执行相关操作。 EF Core 根本不需要它们 - 相关的
Where和DefaultIfEmpty足以在需要时生成适当的 SQL 连接。
标签: asp.net entity-framework asp.net-core .net-core entity-framework-core