这个把我难住了。
我有一个客户和订单实体。客户可以有多个订单。
当我创建新订单并设置 Customer 属性 (Order.Customer = customer) 时,如果客户有 10,000 个订单,则会有很长的延迟(20 秒)。在添加这个新订单之前,上下文似乎正在加载所有 10,000 个订单。
我目前没有直接使用 FK,我怀疑这可能会有所帮助。
有什么想法可以在不进行大规模重构的情况下改善问题吗?
Cheers.
问题很可能是您使用的是 T4 POCO 模板。该模板生成令人讨厌的修复方法并在所有导航属性中内部使用它们。如果您修改一侧的导航属性,则会触发修复,修复将尝试修改反向导航属性以使对象图保持一致。问题来了。一旦你分配Customer
财产给Order
它将修复的实例Orders
财产在Customer
实例,但修复程序像任何其他代码一样访问属性并触发所有客户订单的延迟加载。
解决办法只有几种:
- 使用外键关系并设置 FK 属性。这应该适用于插入,但对于更新它仍然会导致问题,因为将 FK 属性设置为另一个值将设置
null
导航属性,这将再次触发前一个父级的修复。
- 关闭此操作的延迟加载 - 您很可能不需要它来创建新订单。
- 修改模板并删除fixupus
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)