实体框架4非常慢地将订单链接到拥有10,000个订单的客户

Mar*_*low 4 entity-framework entity-framework-4

这个让我难过.

我有一个客户和订单实体.客户可以有很多订单.

如果客户在创建新订单并设置客户属性(订单.客户=客户)时有10,000个订单,则会有一个LONG延迟(20秒).在添加这个新订单之前,上下文似乎正在加载所有10,000个订单.

我目前没有直接使用FK,我怀疑这可能有所帮助.

任何想法如何在没有大规模重构的情况下改善问题?

干杯.

Lad*_*nka 9

问题很可能是你正在使用T4 POCO模板.此模板生成令人讨厌的修复方法,并在所有导航属性内部使用它们.如果您在一侧修改导航属性,则会触发fixup,它将尝试修改反向导航属性以使对象图形保持一致.这就是问题所在.将Customer属性分配给Order实例后,它将修复实例Orders上的属性,Customer但修复访问属性与任何其他代码一样,并触发所有客户订单的延迟加载.

只有很少的解决方案:

  • 使用外键关系并设置FK属性.这应该适用于插入,但是对于更新,它仍然可能导致问题,因为将FK属性设置为另一个值将设置null为navigation属性,这将再次触发前一个父级的修复.
  • 关闭此操作的延迟加载 - 您很可能不需要它来创建新订单.
  • 修改模板并删除fixupus