【发布时间】:2020-06-12 14:17:49
【问题描述】:
使用 EF Core,我想获取外键而不需要与这些表连接。
我有两张桌子:
- 用户 [id, name, system(FK)]
- 系统 [id, name]
我希望能够从Users 表中获取System 的外键。如果没有选择除 FK 之外的其他属性,我会认为 EF 会足够聪明地删除连接,但这不是我在测试时看到的。
我试过了:
var userSystem = DBContext.Users
.Where(a => a.Id == 1)
.Select(a => new { UserId = a.id, SystemId = a.system.Id })
.FirstOrDefault();
但是查看生成的 SQL 查询,它在系统表上包含一个不必要的 LEFT JOIN。关于如何让 EF 在没有加入的情况下生成代码的任何想法?
注意:在此示例中,连接显然不是问题,但我还有其他查询,其中有很多 FK 被提取,具有严格的性能要求。
【问题讨论】:
-
Any ideas as to how I can make EF generate code without the join?- 那么如何将用户 ID 映射到过滤器? -
正如你提到的
system是FK那么它应该是int我猜。而且你不能在Select中使用a.system.Id。如果您在Users表中有SystemId,那么只需使用 select asSelect(a => new { UserId = a.id, SystemId = a.SystemId }) -
向我们展示您的模型的代码
-
用户实体中的 System(FK) 列是否设置为可空或不可空?