【问题标题】:Telerik DataAccess (OpenAccess) nullable foreign key performanceTelerik DataAccess (OpenAccess) 可为空的外键性能
【发布时间】:2016-11-17 21:05:04
【问题描述】:

我们正在向使用 Telerik DataAccess ORM 的人寻求帮助。最近,我们遇到了一个可空外键的大性能问题。

当我们将值分配给可为空的 int 外键属性(没有 SaveChanges)时 - Telerik 会多次调用数据库并执行一些奇怪的工作。我们使用dotTrace,发现有很多SQL DataReader调用和一些奇怪的string/DateTime/Enum/...转换器。只有当我们为属性设置值时才会出现此问题,get 工作正常。

关于我们的环境。我们试图创建一个空的控制台应用程序。调用了相同的奇怪代码,但在本地环境中要快得多 - 小型实体和本地数据库约为 60 毫秒。对于大型实体,大约需要 1.5 秒,但在我们使用 Azure Sql DB 的生产服务器中 - 需要 10 到 50 秒

备注:我们尝试直接加载和设置对象,不使用外键,没有帮助。

public class Entity
{
    public int? ParentId { get; set; } // Wee see this issue when we set value to the ParentId or Parent property. SaveChanges is not called.

    public Parent Parent { get; set; }
}

Here你可以找到dotTrace调用栈。

【问题讨论】:

    标签: c# azure telerik openaccess


    【解决方案1】:

    最后,我解决了这个问题。我想警告所有使用 IsManaged 配置的人。每次设置 ParentId 或 Parent 实体时,所有具有指定 ParentId 的孩子都会被加载到内存中。即使启用了延迟加载。

    Telerik 同意这种行为可以优化,但由于向后兼容性,他们不想进行任何更改。

    【讨论】:

      猜你喜欢
      • 2010-10-05
      • 2012-06-25
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 2021-12-15
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多