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

本文关键字:包含 路径 无效 框架 实体 | 更新日期: 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);