1

アプリケーションでSqlDependencyサービスを作成しました。クエリを手動で入力すると完全に機能しますが、ワイルドカードを含めることはできません(理由はよくわかりません)。

例えば:

//Using this SqlCommand will work
new SqlCommand("SELECT [employees].[name] FROM [dbo].[employees]", sqlNotificationConn)

//But this one won't
new SqlCommand("SELECT [employees].* FROM [dbo].[employees]", sqlNotificationConn)

//And this one won't either
new SqlCommand("SELECT * FROM [dbo].[employees]", sqlNotificationConn)

したがって、基本的には、DbContextに、処理するすべてのフィールドを含む完全なSELECTコマンドを生成させたいと考えています。

Linq 2 SQLでは、このサービスを使用してdbContext.GetCommand(.....);

EF 4.0(または4.1でしたか?)では、dbContext.employee.ToTraceString();

しかし、EF 4.4では、そのSELECTクエリ文字列を生成するものが見つかりません...。

4

2 に答える 2

2

DbContext( ) を使用DbQueryすると、次のように簡単になります。

query.ToString()

( ObjectContext)ObjectQuery付き:

((ObjectQuery)query).ToTraceString()

ちなみに、は a (または、それぞれ) にquery基づく任意の式にすることができます。したがって、生成された SQL クエリも表示されます。DbSetObjectSetdbContext.employee.Where(e => e.Name == "Gates").ToString()

ToList()Single()、などの実行を強制する LINQ ステートメントFirstOrDefault()は、新しいオブジェクトを作成しToString()、オブジェクトの型名を返します。

于 2012-10-02T18:12:16.237 に答える
0

ToTraceString()はまだ EF にあり、いつもと同じ場所です。ただし、オンObjectQueryではなくオンDbQueryです。そうは言っても、私は EF 用の SQL Server プロバイダーを見たことがありません*。SQL では常に離散フィールドを使用します。

于 2012-10-02T17:34:03.417 に答える