跟踪实体框架4.0:外键的额外查询

时间:2013-06-25 16:46:24

标签: entity-framework c#-4.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

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

因此,我们希望找出此额外查询的目的以及使其消失的方式

1 个答案:

答案 0 :(得分:0)

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

int contractId = context.Contracts
   .Where(T => T.Name == contractName)
   .Select(T => T.Id)
   .Single();