SQLのログ出力できた
Soma(http://soma.codeplex.com/)でSQLのログ出力を実装できました。
たとえばこんなコードを記述すると
using (var context = new SampleEntities()) { context.Employee.Where(e => e.Id > 1).ToList(); Console.WriteLine("------------"); context.ExecuteStoreQuery<Employee>("select * from employee where id = {0}", 2); }
こんなログが出力されます(いまのところコンソール出力のみ)。
SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Employee] AS [Extent1] WHERE [Extent1].[Id] > 1 ------------ select * from employee where id = 2
例に示したようにLINQ to Entityから変換されるSQLも直接指定のSQLもログ出力の対象になります。もちろん、SQLファイルを使ったSQLも対象です。
この機能は便利なのですが、悩みどころがあって、EntityFrameworkのツール類の恩恵を受けながらSQLをフックするには、machine.configを修正するのが正統な方法のようなのです。machine.configへの登録が面倒くさいというのと、まじめにツールと連携できるようにするのが大変そうという2つが悩みです。プロバイダのつくり方はサンプル(http://code.msdn.microsoft.com/EFSampleProvider)あるのですが。
いくつかツールのサポートや設定が若干増えるのを妥協(ビルド時のモデルのチェックをoffにしたり、実行用とツール用で接続文字列を切り替えたり)すれば、machine.configに登録しなくてもちゃんと動きそうではあります。どうしようか迷い中ですが、とりあえず、こっちの方向で考えてみます。