2013-06-25 2 views
0

В следующем примере мы вставляем объект, называемый taskinstance, в наш контекст. у нас есть внешний ключ FK_Contract, что мы устанавливаем на 2.Trace Entity Framework 4.0: дополнительные запросы для внешних ключей

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

В следе созданных рамок сущности, мы видим, без удивления запроса выбора Id в соответствии с contractName, но мы также видим дополнительный запрос выглядит как:

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

Этого дополнительного запрос приводит ко многим проблемам , особенно когда мы работаем с зарубежным столом с миллионами записей. Сеть идет вниз!

Поэтому мы бы хотели Выяснить назначения этого дополнительного запроса и способ, чтобы сделать его исчезнуть.

ответ

0

Похоже, что дополнительный запрос заполняет набор задач на возвращаемом объекте Contract. Попробуйте проецировать только нужный столбец:

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

Спасибо, Ричард, ваш ответ исправил мою проблему! :) – Julien