Telerik DataAccess(OpenAccess)可以为空的外键性能

时间:2016-11-08 12:35:21

标签: c# azure telerik openaccess

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

当我们将值赋给nullable int外键属性(没有SaveChanges)时 - Telerik会对数据库进行多次调用并做一些奇怪的工作。我们使用了dotTrace,发现有很多SQL DataReader调用和一些奇怪的字符串/ DateTime / Enum / ...转换器。此问题仅在我们为属性设置值时才会出现,get工作正常。

关于我们的环境。我们尝试创建一个空的控制台应用程序。调用相同的奇怪代码,但它在本地环境中要快得多 - 对于小型实体和本地数据库来说约为60ms。对于大型实体,它是~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调用堆栈。

1 个答案:

答案 0 :(得分:0)

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

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