我必须一个接一个地重新计算大量实体的值。
在该过程中,所有自跟踪实体都在同一个 ObjectContext 中进行更改。对于需要处理的每个实体,必须从数据库中获取少量数据。这会导致很多相同的 SQL 查询,但使用不同的参数。
我正在使用Solutions Design 的 ORM Profiler软件来分析发送到数据库的查询。
查询本身对我来说似乎没问题。它们很短,不需要太多时间来执行。
但是,我对探查器如何向我显示查询的实际处理方式感到困惑:
如您所见,它不断打开和关闭同一个数据库连接。
现在,看看单个打开/查询/关闭连接的时间:
看起来打开和关闭数据库连接会浪费时间。
阅读此答案后,我更改了代码,现在看起来像这样:
using (var connection = new EntityConnection(ConfigurationManager.ConnectionStrings["MyEntities"].ConnectionString))
{
using (var context = new MyEntities(connection))
{
// ...
我现在可以看到它仍在使用相同的连接(这很好),但是,连接仍然在查询之间不断关闭和打开。
Gert Arnold建议我在使用上下文之前显式打开连接。然后我修改了我的代码,使它看起来像这样:
using (var connection = new EntityConnection(ConfigurationManager.ConnectionStrings["MyEntities"].ConnectionString))
{
connection.Open();
using (var context = new MyEntities(connection))
{
// ...
现在它起作用了!每个查询都发送到同一个数据库连接:
我现在很好奇为什么我需要在使用上下文之前打开连接?