5 つの個別のテーブルを含む Entity Framework プロジェクトがあります。これらのテーブルからデータをクエリして を使用する.Include()
と、生成されるクエリが非常に遅くなり、タイムアウトになります。
クエリをストアド プロシージャに移動しました。現在、このストアド プロシージャをクエリし、返されるデータを既存のデータ クラスに簡単にマップする方法を探しています。
EF の DataContext に対する元の Linq クエリは次のようになりました。
var data = (from a in context.A
.Include("B")
.Include("C")
.Include("D")
.Include("E")
where a.Id == someValue
select a);
次のような Entity データ オブジェクトを返します。
class A
{
int Id;
string otherProperties;
List<B> B;
List<C> C;
List<D> D;
List<E> E;
}
SQL サーバーで実行するために EF が生成したクエリは、次のような結果セットを返しました。
C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 -------------------------------------------------- -------- A1 A2 B1 B2 A1 A2 C1 C2 A1 A2 C1 C2 A1 A2 C1 C2 A1 A2 D1 D2 A1 A2 D1 D2 A1 A2 D1 D2 A1 A2 E1 E2 A1 A2 E1 E2
(1 B レコード、3 C レコード、3 D レコード、および 2 E レコードを想定しています。
このクエリをストアド プロシージャで再現し、実行時間を実質的にゼロに短縮しましたが、結果セットを Entity Framework データ クラス (上記のクラス) にマップする方法を見つけようとしていますA
。
EF は、Linq クエリを使用するときにすでに舞台裏のどこかでそれを行っているため、これが確実に可能ですが、それが私がアクセスできるものであるかどうかはわかりません。
Entity Framework で単一のストアド プロシージャ (Function Import) を複数レベルの Entity Framework クラスにマップする簡単な方法はありますか?