EF 5.0 を使用するアプリケーションがあります。2 つのテーブルがあるとします。
tableA(IDTableA, IDTableB...)
TableB(IDTableB, ...)
tableA の要素を照会すると、次のことができます。
List<TableA> lstResult = myContext.TableA.SQLQuery("select * from TableA").ToList();
ただし、この場合、タイプ TableA のエンティティ内のコレクション TableA.TableA は入力されておらず、null であるため、他のクエリを実行する必要があります。
1.- lstResult 内のエンティティのすべての ID を ID1、ID2 の形式の文字列に変換します。この文字列に strIDs という名前を付けます。
2.- クエリを実行します:
lst<TableB) lstResult2 = myContext.tableB.SQLQuery("select * from TableB where IDTableB IN(" + strIDs + ")").ToList();
この時点で、EF はコレクション IDTableB を tableA に設定します。
したがって、これにより2つのクエリを実行できます。1 つは TableA のレジスターを取得し、もう 1 つは TableB のレジスターを取得し、それらの関係を知ります。
tableA に多くの FK がある場合、多くの追加クエリが必要になるため、効率が悪いと思います。
同様の方法で遅延読み込み eorks を行います。情報が必要な場合は、この追加のクエリを実行します。ただし、dataContext の有効期間が短いため、遅延読み込みを使用したくありません。そのため、クエリの結果としてエンティティを返すと、子レコードを取得しようとすると、エンティティがアウトであるというエラーが表示されます。コンテキストの。
したがって、他の解決策はビューを使用することですが、子にデータを入力できるかどうかを知りたいです。
また、動的クエリの方がクエリを作成しやすいため、生のSQLを使用したいと思います。
ありがとう。