2009-05-04 14 views
19

Sto utilizzando linq su Nhibere per attivare alcune query di selezione sul database.Come conoscere la query generata da Fluent NHibernate

La mia domanda è, come faccio a sapere, la query generata da Fluent NHibernate?

+3

Fluent NHibernate ** non ** genera qualsiasi domanda. È NHibernate che li genera. –

+0

Penso che questa domanda possa aiutarti: http://stackoverflow.com/questions/474659/how-to-log-sql-calls-with-nhibernate-to-the-console-of-visual-studio – HerbalMart

risposta

5

Se si desidera che SQL sia in log4net, assicurarsi di impostare il programma di registrazione nella sezione di configurazione.

Ho inserito il pacchetto NHibernate in "INFO" per ridurre il rumore e NHibernate.SQL a tutti in modo da poter registrare tutte le istruzioni SQL.

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


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

2

Vedere this. Quello che ti serve è hibernate.show_sql.

+0

grazie .. ............. –

+7

Come si configura questo con Fluent NHibernate? –

35

Con Fluent NHibernate, è possibile attivare show_sql come questo:

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

NHibernate stamperà ogni istruzione SQL per Console.Out.

+1

Ciao Kevin, Grazie per aver postato questo! Mi chiedo se hai anche collegato Log4Net in modo da inviare l'SQL generato a un file? – 5x1llz

+13

Questo è così frustrante. Qualche idea sul perché questo non funzionerebbe mai? Sto guardando attraverso la mia console e non è lì. – Milimetric

0

È possibile utilizzare i profiler di sql come this one troppo.

-1

È inoltre possibile collegarsi a log4net.

0

Comprare e utilizzare definitivamente NHProf. Questo è un prodotto fantastico e non mostra solo quali query vengono eseguite, ma mostra anche potenziali problemi di prestazioni con i mapping e le query di NHibernate.

2

Ho trovato 4 opzioni per conoscere sql query in nhibernate e fluente nibernato.

  1. Registro - Joey V. ha risposto in risposta a questa stessa domanda.
  2. ShowSql - Kevin Berridge ha risposto in risposta a questa stessa domanda.
  3. NHProf - Questo è un fantastico profiler. NHProf
  4. Intercettatore: è davvero bello vedere sql. possiamo metterlo nel nostro Output di Visual Studio e anche nel file di log.

    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; 
        } 
    }