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 Framework4.3安装以及错误(基础连接已经关闭:未能为SSL/TLS……)问题解决!