实体框架Include():指定的包含路径无效

时间:2015-10-05 21:31:41

标签: c# .net entity-framework

我有以下可正常工作的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()引用是标准实体框架。

2 个答案:

答案 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);