次の例では、 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
この余分なクエリは、特に数百万のレコードを持つ外部テーブルを操作する場合に、多くの問題を引き起こします。ネットワークがダウンします!
したがって、この余分なクエリの目的と、それを消す方法を見つけたいと思います。