taediumの日記

2010-06-30

[][] 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に登録しなくてもちゃんと動きそうではあります。どうしようか迷い中ですが、とりあえず、こっちの方向で考えてみます。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/taedium/20100630/p1