实体框架包含():指定的包含路径无效
本文关键字:包含 路径 无效 框架 实体 | 更新日期: 2023-09-27 18:16:20
我有以下实体框架语句,已正常工作。
CostingEvent targetEvent = repository.Query<CostingEvent>()
.FirstOrDefault(ce => ce.Id == targetId);
但是,我需要禁用这段代码的延迟加载,所以我在前面的语句中添加了一个Include()
元素:
CostingEvent targetEvent = repository.Query<CostingEvent>()
.Include(ce => ce.ProposalSection.Proposal.Costing)
.FirstOrDefault(ce => ce.Id == targetId);
但是,这会生成一个运行时异常:
指定的包含路径无效。EntityType 'Leo.Domain。CostingEvent'没有声明一个名为'Costing'的导航属性。
我真的不明白这个错误。首先,我指的不是CostingEvent.Costing
,而是CostingEvent.ProposalSection.Proposal.Costing
。此外,这些都是智能感知中显示的有效导航属性。
注意:这是一个数据库优先的应用程序。另请注意:repository
是一个包装类,但Include()
参考是标准的实体框架。
嵌套的EF include很棘手。
你有没有考虑过
CostingEvent targetEvent = repository.Query<CostingEvent>()
.Include("ProposalSection.Proposal.Costing")
.FirstOrDefault(ce => ce.Id == targetId);
CostingEvent targetEvent = repository.Query<CostingEvent>()
.Include(ce => ce.ProposalSection)
.Include(ce => ce.ProposalSection.Proposal)
.Include(ce => ce.ProposalSection.Proposal.Costing)
.FirstOrDefault(ce => ce.Id == targetId);
您需要像这样选择子导航属性:
CostingEvent targetEvent = repository.Query<CostingEvent>()
.Include(ce => ce.ProposalSection.Select(ps=>ps.Proposal.Select(p=>p.Costing)))
.FirstOrDefault(ce => ce.Id == targetId);