を使用してSQLをログする方法この類似の質問が何度か尋ねられていることを認識しています。エンティティフレームワーク4.3(コードファースト)とSQL Azureデータベース
エンティティフレームワーク(4.3)を使用し、SQL Azure(フェデレーションデータベース上)に対して実行しています。私はエンティティフレームワークによって生成されているSQLを記録できるようにしたいと思います。
私はEntity Profiler Frameworkを使用しましたが、これは開発中に役立ちますが、生産中に役立つかどうかはわかりません。
これはSQL Azureデータベースなので、SQLプロファイラは使用できません。
私はEFTracingProviderを使用して、hereの手順に従ってみました。残念ながら、最初のコマンド(適切なフェデレーションを使用しています)を実行しようとすると、「指定されたメソッドがサポートされていません」という例外が発生します。ここで
public MyContext(int tenantId)
: base(CreateTracingConnection("TheDb"), true)
{
const string FederationCmdText =
"USE FEDERATION TenantFederation(CustomerId = {0}) WITH RESET, FILTERING=ON";
((IObjectContextAdapter)this).ObjectContext.EnableTracing();
((IObjectContextAdapter)this).ObjectContext.Connection.Open();
// This is the line which throws the exception
this.Database.ExecuteSqlCommand(string.Format(FederationCmdText, tenantId));
}
だ例外:
- がための好ましいアプローチEFTracingProviderです:だからここ
Specified method is not supported. at EFProviderWrapperToolkit.DbConnectionWrapper.CreateDbCommand() at System.Data.Common.DbConnection.CreateCommand() ...
が私の質問です
エラーを生成するコードは以下のとおりです。 SQL問合せを(グローバルに)記録しますか?
- もしそうなら、上記の例外が発生する理由は何ですか?
- そうでない場合は、Entity Frameworkによって生成されたSQLをすべてログに記録できるもう1つのメカニズムがありますか?あなたの助けのための
おかげで、 エリック
これは著者らも同様に推奨されているようです。 [Here](http://efwrappers.codeplex.com/)の「既知の問題」で、「context.Connection.GetStoreConnection()。CreateCommand()」によってストアコマンドを実行すると言っています。あなたがやったことを効果的にやって、ラップされた接続を使用してください:) – slawek