23

データベースへの選択クエリを起動するためにlinq to Nhibernateを使用しています。

私の質問は、Fluent NHibernate によって生成されたクエリをどのように知ることができるかということです。

4

8 に答える 8

37

show_sqlFluent NHibernate を使用すると、次のように有効にすることができます。

Fluently.Configure()
    .Database( MsSqlConfiguration.MsSql2005.ShowSql().ConnectionString(...) )...

NHibernate は、すべての sql ステートメントを に出力するようになりましたConsole.Out

于 2009-05-22T12:09:55.897 に答える
6

SQL を log4net に入れたい場合は、構成セクションでロガーを設定してください。

NHibernate パッケージを「INFO」に配置してノイズを減らし、NHibernate.SQL をすべてに配置して、すべての SQL ステートメントをログに記録できるようにしました。

  
 <logger name="NHibernate">
   <レベル値="情報" />
 </ロガー>


  <logger name="NHibernate.SQL">
    <レベル値="ALL" />
  </ロガー>

于 2009-10-07T15:16:51.753 に答える
6

これも役立つかもしれませんhttp://nhprof.com/

于 2009-05-22T13:49:01.110 に答える
6

nhibernate と流暢な nhibernate で SQL クエリを知るための 4 つのオプションを見つけました。

  1. ログ - Joey V. は、この同じ質問に答えて言いました。
  2. ShowSql - Kevin Berridge は、この同じ質問に答えて言った。
  3. NHProf - これは素晴らしいプロファイラーです. NHProf
  4. Intercepter - SQL を見るのは本当に良いことです。それを Visual Studio の出力やログ ファイルに入れることもできます。

    ISessionFactory sf = Fluently.Configure()
            .Database(MySQLConfiguration.Standard.ConnectionString(ConnectionString).ShowSql())
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Stock>())
            .ExposeConfiguration(c => c.SetInterceptor(new ABCInterceptor()))
            .BuildSessionFactory();
    
    
    public class ABCInterceptor : EmptyInterceptor
    {
        public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
        {
           Trace.WriteLine(sql.ToString());
           return sql;
        }
     }
    
于 2013-07-18T12:38:14.653 に答える
2

これを参照してください。必要なのはhibernate.show_sql.

于 2009-05-04T06:56:45.653 に答える
0

このようなSQLプロファイラーも使用できます。

于 2009-05-22T13:51:34.523 に答える
0

NHProfを必ず購入して使用してください。これは素晴らしい製品であり、実行されているクエリを表示するだけでなく、NHibernate のマッピングとクエリに関する潜在的なパフォーマンスの問題も表示します。

于 2009-10-16T06:11:26.380 に答える
-1

log4net をフックすることもできます。

于 2009-05-22T18:46:25.230 に答える