这个让我难过。
我有一个客户和订单实体。客户可以订购多个订单。
如果客户在创建新订单并设置客户属性(Order.Customer = customer)时有10,000个订单,则会有一个LONG延迟(20秒)。在添加这个新订单之前,上下文似乎正在加载所有10,000个订单。
我目前没有直接使用FK,我怀疑这可能有所帮助。
任何想法如何在没有大规模重构的情况下改善问题?
干杯。
答案 0 :(得分:9)
问题很可能是您使用的是T4 POCO模板。此模板生成令人讨厌的修复方法,并在所有导航属性内部使用它们。如果您在一侧修改导航属性,则会触发fixup,它将尝试修改反向导航属性以使对象图形保持一致。这就是问题所在。一旦将Customer
属性分配给Order
实例,它将在Orders
实例上修复Customer
属性,但修复访问属性与任何其他代码一样,并触发所有客户订单的延迟加载。
只有很少的解决方案:
null
设置为navigation属性,这将再次触发前一个父项的修复。答案 1 :(得分:1)
也许一种不同的方法可行。如果您有客户实例,请尝试:
customer.Orders.Add(new Order(){parameter1 = value1, parameter2=valu2, etc.})
现在不是@work,所以不要手动检查实体结构(使用项目的自跟踪实体)来查看是否有意义。但是,通过将其添加到订单集合中,实体可以解决订单与客户之间的关系,而无需获得此特定客户的所有其他10k订单。