EntityFramework可以一次性发送所有查询吗?

时间:2015-11-25 13:59:48

标签: c# mysql multithreading entity-framework

我们有一个系统,我们有8个表。在每个上下文中,我们将插入/更新8个表中的一些。正如我在日志中看到的那样,实体框架按顺序逐个发送多个查询以更新每个表。有没有办法将实体框架一次性发送到数据库并获取状态? 在我看来,这将改善整体性能,因为我们避免了网络呼叫。

仅供参考,我们的系统是一个多线程,每个线程都有自己的上下文来更新这8个表。由于单个上下文(即线程)对DB有多个查询,因此它变得非常慢。

欢迎任何建议,非常感谢..提前致谢...

2 个答案:

答案 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);