entity-framework-core - 渴望从不使用其主键的自引用表中加载完整的层次结构
问题描述
我正在尝试从不使用其主键的自引用表中加载分层数据。所以这个答案似乎不适用。
我有下表包含分层数据的舰队详细信息
您可以看到该表不是通过其主键fleetdetailid自我引用的
相反,它使用的是fleetchildid和fleeid。请参阅粗体值以了解该概念。
车队详情 | 稍纵即逝 | 舰队名称 | 小孩子 | 子名 |
---|---|---|---|---|
76234 | 12327 | 指导 Générale Adjointe Ressources Humaines et Moyens 技术 | 12328 | Patrimoine bâti & logistique 技术 |
76235 | 12328 | Patrimoine bâti & logistique 技术 | 12329 | 管辖权 |
76236 | 12328 | Patrimoine bâti & logistique 技术 | 12330 | Ateliers Parc Auto |
76239 | 12328 | Patrimoine bâti & logistique 技术 | 12333 | 表现形式和庆祝活动 |
76241 | 12328 | Patrimoine bâti & logistique 技术 | 12335 | Mission Entretien et Assurances |
76248 | 12328 | Patrimoine bâti & logistique 技术 | 12342 | Entretien Bâtiments |
76249 | 12342 | Entretien Bâtiments | 12344 | 细胞外延 |
76257 | 12342 | Entretien Bâtiments | 12351 | Cellule Electricité |
76242 | 12335 | Mission Entretien et Assurances | 12336 | 门房 |
76243 | 12335 | Mission Entretien et Assurances | 12337 | Agent d'entretien polyvalent du bâtiments |
76240 | 12333 | 表现形式和庆祝活动 | 12334 | 方泰尼尔 |
76237 | 12330 | Ateliers Parc Auto | 12331 | 严格的分工 |
76238 | 12330 | Ateliers Parc Auto | 12332 | Astreinte Viabilité Hivernale |
舰队表在这里:
稍纵即逝 | 舰队名称 |
---|---|
12327 | 指导 Générale Adjointe Ressources Humaines et Moyens 技术 |
12328 | Patrimoine bâti & logistique 技术 |
12330 | Ateliers Parc Auto |
12333 | 表现形式和庆祝活动 |
12335 | Mission Entretien et Assurances |
12342 | Entretien Bâtiments |
12344 | 细胞外延 |
12351 | Cellule Electricité |
12336 | 门房 |
12337 | Agent d'entretien polyvalent du bâtiments |
12334 | 方泰尼尔 |
12331 | 严格的分工 |
12332 | Astreinte Viabilité Hivernale |
实体如下:
public partial class Fleet
{
public Fleet()
{
FleetDetailFleet = new HashSet<FleetDetail>();
FleetDetailFleetChildNavigation = new HashSet<FleetDetail>();
AdditionalInit();
}
public int FleetId { get; set; }
public string Name { get; set; }
public virtual ICollection<FleetDetail> FleetDetailFleet { get; set; }
public virtual ICollection<FleetDetail> FleetDetailFleetChildNavigation { get; set; }
partial void AdditionalInit();
}
public partial class FleetDetail
{
public int FleetDetailId { get; set; }
public int FleetId { get; set; }
public string FleetName { get; set; }
public int? FleetChildId { get; set; }
public string ChildName { get; set; }
public virtual Fleet Fleet { get; set; }
public virtual Fleet FleetChildNavigation { get; set; }
}
我尝试了以下 EF 查询,但它不起作用:
var tree = context.FleetDetail
.Include(fd => fd.FleetChildNavigation)
.ThenInclude(f => f.FleetDetailFleetChildNavigation).AsEnumerable()
.Where(fd => fd.FleetChild == null);
它返回一个没有填充导航属性的结果集。
解决方案
推荐阅读
- docker - 'locale' 命令的结果在 docker 容器内外不同
- android - 如何在共享首选项中存储 Authtoken 并在远程服务器调用时验证 Auth 令牌
- ios - 混合时了解卷积核的输出扩展
- mysql - 创建数据库时在节点中转义 MySQL 的问题
- sql - 如何优化多重连接
- python - 如何在 django 中制作没有预定义属性的模型?
- javascript - 自定义 ngx-datatable 寻呼机组件以显示文本而不是图标并添加 totalVisible 属性?
- angular - Angular 组件看不到服务中的功能
- python - 如何使用 mstats.kruskalwallis
- java - 我执行了 selenium 代码,但出现了错误