我们正在向使用 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; }
}
在这里您可以找到 dotTrace 调用堆栈。