我有以下可正常工作的Entity Framework语句。
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
。此外,这些都是在Intellisense中显示的有效导航属性。
注意:这是一个数据库优先的应用程序。另请注意:repository
是一个包装类,但Include()
引用是标准实体框架。
答案 0 :(得分:1)
嵌套的EF包含很棘手。
您是否考虑过
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);
答案 1 :(得分:1)
您需要选择这样的子导航属性:
CostingEvent targetEvent = repository.Query<CostingEvent>()
.Include(ce => ce.ProposalSection.Select(ps=>ps.Proposal.Select(p=>p.Costing)))
.FirstOrDefault(ce => ce.Id == targetId);