SQLのログ

Somaは、Entity Frameworkをベースにしたフレームワークにすることにしました。PostSharpを使うのは見送り。

O/Rマッパーには必須と思われるSQLのログを出力する機能がEntity Frameworkにはないので、プロバイダーをラップしてSQLが実行される直前でログ出力可能にしようと思います。
Visual StudioにはEntity FrameworkのData ModelをSQL Serverから作る機能がありますが、この機能を使うと接続文字列をapp.configなどに生成してくれます。Somaを使う場合は、この接続文字列に含まれるプロバイダーの名前をカスタマイズすることになります。

  <connectionStrings>
    <add name="MyObjectContext" 
     connectionString="...(略)... provider=Soma.Data.Client.SqlClientFactoryWrapper; ...(略)...;"
     providerName="System.Data.EntityClient" />
  </connectionStrings>

Soma.Data.Client.SqlClientFactoryWrapperというプロバイダを利用できるようにするにはapp.configなどに次のような記述を付け加えます。

  <system.data>
    <DbProviderFactories>
      <add name="Soma Data Provider Wrapper for SqlServer"
       invariant="Soma.Data.Client.SqlClientFactoryWrapper"
       support="FF"
       description="Soma Data Provider Wrapper for SqlServer"
       type="Soma.Data.Client.SqlClientFactoryWrapper, Soma" />
    </DbProviderFactories>
  </system.data>

この記述、もしかしたらSomaのアセンブリに入れてしまうことができるかも?試さないとわからないですが、もしできれば使う側は接続文字列に含まれるプロバイダーの名前を変更するだけなので楽になりますね。