Entity Framework EF 代码首先使用 ExecuteStoreCommand 执行 sproc 非常慢

Posted

技术标签:

【中文标题】Entity Framework EF 代码首先使用 ExecuteStoreCommand 执行 sproc 非常慢【英文标题】:Entity Framework EF code first executing sproc using ExecuteStoreCommand is very slow 【发布时间】:2012-11-29 01:21:04 【问题描述】:

我在 Azure sql db 中有一个存储过程,当我从 SSMS 运行时,它在大约 300 毫秒内完成。 sproc 接受一个 id 和一个日期范围,收集一些数据并将其保存到聚合表中。 它不返回任何结果。

当它从 EF 代码第一个 ExecuteStoreCommand 对象运行时(具有相同的参数) 大约需要 60 秒才能完成。

我尝试使用 context.Database.ExecuteSqlCommand 和 context.Database.SqlQuery 同样的结果,很慢!

有人可以解释一下,与直接执行存储过程相比,EF 的执行速度为何如此之慢?

是否有任何像样的工具可以告诉我 EF 在做什么(分析器?)

【问题讨论】:

你是如何配置 EF 执行需要 60 的?我的意思是它是由SQL Profiler ??。请把你的 C# 代码放在这里。 我只是增加了 objectContext.CommandTimeout 直到它毫无例外地完成。 _context.GetObjectContext().ExecuteStoreCommand("exec sproc 0, 1, null, null", Id, Count); 【参考方案1】:

如果没有存储过程的代码,很难告诉您可能没有考虑哪种“最佳实践”,但此页面“Code Project: Performance and the Entity Framework”提供了很多关于提高 EF 性能的有用信息。

这个“article”有很多关于使用 Visual Studio 2010 分析器工具分析 EF 的数据访问活动的有用信息。

【讨论】:

以上是关于Entity Framework EF 代码首先使用 ExecuteStoreCommand 执行 sproc 非常慢的主要内容,如果未能解决你的问题,请参考以下文章

ado.net entity framework无法更新数据库

Entity Framework Many to Many Relation Mapping(Entity Framework多对多关系映射)

Entity Framework 基础操作

Entity Framework4.3安装以及错误(基础连接已经关闭:未能为SSL/TLS……)问题解决!

用于简单数据模型和多对多关系的 Optimal Entity Framework 4 查询

ASPNet Entity Framework 6 - EF6,在同一个工作单元中混合异步和同步