Telerik DataAccess (OpenAccess) 可空外键性能

Telerik DataAccess (OpenAccess) nullable foreign key performance

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

当我们为可为空的 int 外键赋值时 属性(没有 SaveChanges)- Telerik 对数据库进行了多次调用并做了一些奇怪的工作。我们使用 dotTrace 发现有很多 SQL DataReader 调用和一些奇怪的 string/DateTime/Enum/... 转换器。这个问题只出现在我们给 属性 赋值的时候,get 工作正常。

关于我们环境的一点点。我们试图创建一个空的控制台应用程序。调用了相同的奇怪代码,但它在本地环境中要快得多 - 小型实体和本地数据库约为 60 毫秒。对于大型实体,它是 ~ 1.5 秒,但在我们使用 Azure Sql 数据库的生产服务器中 - 它是 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 调用堆栈。

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

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