entity-framework - Entity Framework 4 将订单链接到拥有 10,000 个订单的客户的速度非常慢

标签 entity-framework entity-framework-4

这个难倒我了。

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

当我创建一个新订单并设置 Customer 属性(Order.Customer = customer)时 Customer 有 10,000 个订单时,会有很长的延迟(20 秒)。在添加这个新订单之前,上下文似乎正在加载所有 10,000 个订单。

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

任何想法如何在不进行大规模重构的情况下改进问题?

干杯。

最佳答案

问题很可能是您使用的是 T4 POCO 模板。此模板生成讨厌的修复方法并在所有导航属性中内部使用它们。如果您在一侧修改导航属性,它会触发修复,它将尝试修改反向导航属性以使对象图保持一致。问题来了。一旦您分配 Customer属性(property)给 Order实例它将修复 Orders Customer 上的属性(property)实例但像任何其他代码一样修复访问属性并触发所有客户订单的延迟加载。

只有几个解决方案:

  • 使用外键关系并设置 FK 属性。这应该适用于插入但对于更新它仍然会导致问题,因为将 FK 属性设置为另一个值将设置 null导航属性,这将再次触发前一个父级的修复。
  • 关闭此操作的延迟加载 - 您很可能不需要它来创建新订单。
  • 修改模板并删除fixupus
  • 关于entity-framework - Entity Framework 4 将订单链接到拥有 10,000 个订单的客户的速度非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6378063/

    相关文章:

    javascript - 如何在 Javascript 中定义 URL 以调用驻留在 Controller 中的 ActionResult 方法

    linq-to-sql - 与LINQ-to-SQL相比, Entity Framework 4(CTP 5)不明智地查询

    c# - 使用 Entity SQL 查询概念模型

    c# - 为什么 ObjectContext.DetectChanges 不将 State 重置为 Unchanged?

    c# - 在 Entity Framework 6.1 中添加列 - 多对多 - Code First

    c# - 种子方法如何使用foreach循环?

    mysql - 防止MySQL中的重复记录

    c# - EntityFramework.dll 中出现 'System.ArgumentException' 类型的异常,但未在用户代码中处理

    entity-framework - EF Code First 在保存更改时处理数据库异常

    c# - Entity Framework 中的排序列属性