Telerik DataAccess (OpenAccess)可空外键性能

本文关键字:性能 DataAccess OpenAccess Telerik | 更新日期: 2023-09-27 18:16:52

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

当我们给可空的int外键属性赋值时(没有SaveChanges) - Telerik会调用数据库并做一些奇怪的工作。我们使用dotTrace,发现有很多SQL DataReader调用和一些奇怪的字符串/DateTime/Enum/…转换器。这个问题只出现在我们将value设置为属性时,get工作正常

一点点关于我们的环境。我们尝试创建一个空的控制台应用程序。调用相同的奇怪代码,但它在本地环境中要快得多-对于小型实体和本地db来说约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; }
}

您可以在这里找到dotTrace调用堆栈。

Telerik DataAccess (OpenAccess)可空外键性能

终于解决了这个问题。我想警告所有使用IsManaged配置的人。每次当你设置ParentId或Parent实体时,所有指定ParentId的子实体都会被加载到内存中。即使启用了惰性加载。

Telerik同意这种行为可以优化,但他们不想做任何改变,因为向后兼容性。