كيفية معرفة الاستعلام الذي تم إنشاؤه بواسطة Fluent NHibernate

StackOverflow https://stackoverflow.com/questions/819040

سؤال

أنا أستخدم linq إلى Nhibernate لإطلاق بعض استعلامات التحديد إلى قاعدة البيانات.

سؤالي هو، كيف أعرف الاستعلام الذي تم إنشاؤه بواسطة Fluent NHibernate؟

هل كانت مفيدة؟

المحلول

إذا كنت تريد أن تكون SQL في log4net، تأكد من تعيين المسجل في قسم التكوين الخاص بك.

وأنا وضعت حزمة NHibernate في "INFO" للحد من الضوضاء وNHibernate.SQL لجميع حتى أتمكن من تسجيل كافة البيانات SQL.

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


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

نصائح أخرى

ومع يجيد NHibernate، يمكنك تشغيل show_sql مثل هذا:

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

وNHibernate والآن طباعة كل عبارة SQL لConsole.Out.

وقد تجد أيضا هذه http://nhprof.com/

لقد وجدت 4 خيارات لمعرفة استعلام SQL في nhibernate وnhibernate بطلاقة.

  1. السجل - جوي ف.قال ردا على هذا السؤال نفسه.
  2. ShowSql - قال كيفن بيريدج إجابة على نفس السؤال.
  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;
        }
     }
    

هذا . ما تحتاجه هو hibernate.show_sql.

ويمكنك استخدام المحللون مزود مثل هذا واحد جدا.

وبالتأكيد شراء واستخدام NHProf . هذا هو منتج رائع وليس فقط يظهر لك ما الاستفسارات تدار، ولكن أيضا يظهر لك أي مشاكل الأداء المحتملة مع تعيينات NHibernate والاستفسارات.

ويمكنك أيضا ربط في log4net.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top