在下面的示例中,我们将一个名为 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
这个额外的查询会导致很多问题,尤其是当我们使用具有数百万条记录的外部表时。网络断了!
因此我们想弄清楚这个额外查询的目的以及使它消失的方法。