0

在下面的示例中,我们将一个名为 taskinstance 的实体插入到我们的上下文中。我们有一个设置为 2 的外键 FK_Contract。

entity.FK_Contract = 2;
context.TaskInstances.AddObject(entity);

实体框架生成的查询是一个简单的插入。(一切安好)

但是,以下查询的工作方式不同。

int contractId = context.Contracts.Where((T) => T.Name == contractName).Single().Id;
entity.FK_Contract = contractId;
context.TaskInstances.AddObject(entity);

在实体框架创建的跟踪中,我们毫不意外地看到了根据 contractName 选择 Id 的查询,但我们还看到了一个额外的请求,如下所示:

select id,... from [TaskInstances] WHERE [Extent1].[FK_Task] = @contractId

这个额外的查询会导致很多问题,尤其是当我们使用具有数百万条记录的外部表时。网络断了!

因此我们想弄清楚这个额外查询的目的以及使它消失的方法

4

1 回答 1

0

看起来额外的查询正在返回Contract对象上填充任务集合。尝试仅投影您想要的列:

int contractId = context.Contracts
   .Where(T => T.Name == contractName)
   .Select(T => T.Id)
   .Single();
于 2013-06-25T18:23:14.187 回答