2

つまり、データベースビューを使用せずに、エンティティモデルでリテラルSQLサブクエリを使用できますか?

コンテキスト:C#オブジェクトを生成するADO.NETクエリがたくさんあります。これらのオブジェクトは、クエリの形状に直接対応しています。つまりObjectContext.Translate、からそれらを抽出するために行うことができますSqlDataReader。これらのクエリはたくさんあり、その多くは非常に複雑で、エンティティフレームワークがサポートしていない機能(whileループ、CTE、階層IDなど)を使用するものもあります。これらの(レガシー)クエリをLINQに変換することはできません。

ただし、これらの結果をラップして、C#側にカスタムフィルタリングを追加できるようにしたいと思います。並べ替え、フィルタリング、ページングなどです。すべてのクエリをビュー(またはストアドプロシージャ)に変換できます。これらをマップしますが、それは面倒でメンテナンスの悪夢です。しかし、原則として、EFはそのルートで「不透明な」SQLクエリで使用できます。

SQLで記述されたサブクエリをエンティティモデルで使用できますか?ではなくObjectContext.Translateを返すが理想的ですが、必須ではありません。クエリの大部分はコンパイル時定数であるため、何らかの形式の前処理が可能です。IQueryableIEnumerable

編集:フィルター/並べ替えクライアント側を追加できるように、何かを返すものを探していIQueryableますが、それらをDBで実行します(通常どおり)。私はEntityFrameworkのコードファーストを使用しています。

4

2 に答える 2

3

DefiningQueryEntitySetのプロパティをリテラルSQLに設定できます。これらは、SQLビューとほぼ同等です。それはあなたの問題を解決しますか?

http://msdn.microsoft.com/en-us/library/cc982038.aspx

于 2012-08-06T14:41:17.313 に答える
1

SQLクエリがエンティティクラスと同じ構造の結果を返す場合は、DbContext.SqlQuery

 var customer=context.Database.
         SqlQuery<Customer>("SELECT ID,NAME from CUSTOMER WHERE TYPE IN 
                     (SELECT TYPEID FROM IMPORTANT_TYPE)");

contextDBContextクラスオブジェクトであると仮定します

于 2012-08-06T14:48:34.520 に答える