我将实体框架用于我们有一个相当复杂的继承模型并且我们使用Table Per Type Inheritance的应用程序。
这非常有效,因为我们可以只查询基类型并获取具体类型。
缺点是生成的EF查询非常大并且有很多外连接。
现在,获取单个对象的查询大约需要4秒才能返回。有趣的是,实际TSQL的执行只需要〜500ms。我基于EF的输出记录。
我们正在使用此代码来记录控制台:
Database.Log = s =>
{
Debug.WriteLine(s);
};
在这个例子的日志中,它通常看起来像:
于2016年8月4日下午2:59:07 -07:00
打开连接[TSQL CODE OUTPUT HERE]
- 于2016年8月4日下午2:59:13执行-07:00
- 在772毫秒内完成,结果为:SqlDataReader
所以我试图理解为什么开始执行查询需要这么长时间。这只是EF必须工作来生成复杂的SQL语句吗?有没有办法缓存这些语句?
注意:我尝试过实施预编译的视图,并没有改变各个查询的性能。
更新:提出了对象实现的问题,所以我再次测试它并加载了一个不在系统中的id。从打开的连接到查询执行开始仍需要4-7秒。没变。