2016-11-08 2 views
0

Мы ищем помощь людей, использующих Telerik DataAccess ORM. В последнее время мы столкнулись с большой проблемой производительности с помощью NULL-ключа.Telerik DataAccess (OpenAccess) с производительностью с нулевым внешним ключом

Когда мы присваиваем значение nullable int foreign key property (без SaveChanges) - Telerik делает несколько вызовов в базе данных и выполняет какую-то странную работу. Мы использовали dotTrace и обнаружили, что существует множество запросов SQL DataReader и некоторые странные преобразователи string/DateTime/Enum/.... Эта проблема появляется, когда мы устанавливаем значение для свойства, get работает нормально.

Немного о нашей среде. Мы попытались создать пустую консольную программу. Вызывается тот же странный код, но он намного быстрее в локальной среде - ~ 60 мс для небольшой Entity и локальной db. Для большого объекта это ~ 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.

ответ

0

Наконец-то я решил эту проблему. Я хочу предупредить всех, кто использует IsManaged конфигурации. Каждый раз, когда вы устанавливаете ParentId или родительский объект, ВСЕ дети с указанным ParentId загружаются в память. Даже если включена ленивая нагрузка.

Telerik соглашается с тем, что такое поведение можно оптимизировать, но они не хотят вносить какие-либо изменения из-за обратной совместимости.