我正在尝试将我们的本土 ORM 解决方案更改为 EntityFramework 5 的概念教授放在一起,而我遇到的第一个问题似乎是一个严重的阻碍。
EF5 出现,我们的盒子,执行标量 sql 操作的时间比 ad hock sql 长约 9 倍,但是当我查看生成的 sql 代码时,sql 本身似乎写得很好,并且运行得很快。
我的 C# 代码:
int surveyId = (from survey in upsEntities.Surveys where !survey.Deleted select survey.SurveyID).First();
Debug.WriteLine("Loading surveyId : {0} through Linq took {1}ms using EF5", surveyId,
sw.Elapsed.TotalMilliseconds);
sw.Restart();
string sql = "Select top 1 surveyId from Survey where deleted = 0";
object val = SMSDataManager.Instance.DataAccessManager.ExecuteScalar(sql);
Debug.WriteLine("Loading surveyId : {0} through AdHock SQL took {1}ms using OrmDataManager", val,
sw.Elapsed.TotalMilliseconds);
SQL 输出:EF5:
SELECT TOP (1)
[Extent1].[SurveyID] AS [SurveyID]
FROM [dbo].[Survey] AS [Extent1]
WHERE [Extent1].[Deleted] <> cast(1 as bit)
临时工:Select top 1 surveyId from Survey where deleted = 0
使用 EF5通过 Linq 加载surveyId:1 花费了2965.8625ms
通过 AdHock SQL 加载surveyId : 1耗时 384.8073ms
根据分析器,两者之间的持续时间对于 EF5 是 1 毫秒,而对于 ad hoc 是 0 毫秒。问题似乎出在EF5的审核注销事件中,大约需要 3 秒,而我的ad hoc sql对于相同的注销事件需要大约 0.6 秒。
是什么导致了 EF5 的巨大开销,我可以做些什么来减轻或解释这一点?