我们有一个系统,我们有8个表。在每个上下文中,我们将插入/更新8个表中的一些。正如我在日志中看到的那样,实体框架按顺序逐个发送多个查询以更新每个表。有没有办法将实体框架一次性发送到数据库并获取状态? 在我看来,这将改善整体性能,因为我们避免了网络呼叫。
仅供参考,我们的系统是一个多线程,每个线程都有自己的上下文来更新这8个表。由于单个上下文(即线程)对DB有多个查询,因此它变得非常慢。
欢迎任何建议,非常感谢..提前致谢...
答案 0 :(得分:1)
单个上下文对DB的多个查询不是查询执行速度慢的原因。通常,大多数项目都有类似的情况,其中单个DB上下文使用实体框架运行多个DML。
请使用SQL事件探查器来确定导致问题的查询。可能是一些不良连接或无效条件创建问题
此外,您还必须验证数据库服务器配置(即服务器可以承载多少负载)
答案 1 :(得分:0)
您可以尝试 .NET Entity Framework Extensions (非免费)。
http://www.zzzprojects.com/products/dotnet-development/entity-framework-extensions/
他们将多个查询合并为一个,并使用批量操作来提高性能。
以下是他们网站的示例:
// Upgrade SaveChanges performance with BulkSaveChanges
var context = new CustomerContext();
// ... context code ...
// Easy to use
context.BulkSaveChanges();
// Easy to customize
context.BulkSaveChanges(operation => operation.BatchSize = 1000);