كيفية معرفة الاستعلام الذي تم إنشاؤه بواسطة Fluent NHibernate
-
03-07-2019 - |
سؤال
أنا أستخدم 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 بطلاقة.
- السجل - جوي ف.قال ردا على هذا السؤال نفسه.
- ShowSql - قال كيفن بيريدج إجابة على نفس السؤال.
- NHProf - هذا ملف تعريف رائع. NHProf
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.