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