2009-05-04 10 views
19

linqを使ってNhibernateを使用して、一部の選択クエリをデータベースに送ります。Fluentによって生成されたクエリを知る方法NHibernate

Fluent NHibernateで生成された質問は、私の質問はどのようにわかりますか?

+3

流暢NHibernateは** **任意のクエリを生成しません。それらを生成するのはNHibernateです。 –

+0

私はこの質問はあなたを助けるかもしれないと思う:http://stackoverflow.com/questions/474659/how-to-log-sql-calls-with-nhibernate-to-the-console-of-visual-studio – HerbalMart

答えて

5

SQLをlog4netにする場合は、設定セクションにロガーを設定してください。

NHibernateパッケージを "INFO"にしてノイズを減らし、NHibernate.SQLをすべてにすることですべてのSQL文を記録できます。

 
<logger name="NHibernate"> 
    <level value="INFO" /> 
</logger> 


    <logger name="NHibernate.SQL"> 
    <level value="ALL" /> 
    </logger> 

2

thisを参照してください。必要なのはhibernate.show_sqlです。流暢NHibernateのでは

+0

ありがとう.. ............. –

+7

どのようにFluent NHibernateでそれを設定しますか? –

35

、あなたはこのようにshow_sqlをオンにすることができます。

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

NHibernateのは、今Console.OutにすべてのSQL文を出力します。

+1

こんにちはKevin、 ありがとうございました! Log4Netを使って生成されたSQLをファイルに送るようにしているのだろうか? – 5x1llz

+13

これはとてもイライラです。なぜこれが今までにうまくいかないのか?私は私のコンソールを見ているだけで、そこにはありません。 – Milimetric

6

また、あなたはあまりにもthis oneようなSQLプロファイラを使用することができ、この便利なhttp://nhprof.com/

0

を見つけるかもしれません。

-1

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

0

間違いなくNHProfを購入して使用してください。これはすばらしい製品で、実行されているクエリだけでなく、NHibernateのマッピングやクエリで発生する可能性のあるパフォーマンス上の問題も示しています。

2

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

  1. ログ - ジョーイ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; 
        } 
    } 
    
関連する問題