۱۳۸۹/۱۰/۰۸

ذخيره سازي SQL توليدي در NH3


همانطور كه در مطلب "NHibernate 3.0 و عدم وابستگي مستقيم به Log4Net" عنوان شد، از اينترفيس جديد IInternalLogger آن مي‌توان جهت ثبت وقايع داخلي NHibernate استفاده كرد. اگر در اين بين صرفا بخواهيم SQL هاي توليدي را لاگ كنيم، خلاصه‌ي آن به صورت زير خواهد بود:
public class LoggerFactory : ILoggerFactory
{
public IInternalLogger LoggerFor(System.Type type)
{
if (type == typeof(NHibernate.Tool.hbm2ddl.SchemaExport))
//log it
}

public IInternalLogger LoggerFor(string keyName)
{
if (keyName == "NHibernate.SQL")
//log it
}
}
يا كليد NHibernate.SQL بايد پردازش شود (جهت ثبت SQL هاي كوئري‌ها) يا نوع NHibernate.Tool.hbm2ddl.SchemaExport جهت ثبت SQL ساخت ساختار جداول بانك اطلاعاتي بايد بررسي گردد.
سورس كامل اين كتابخانه‌ي كوچك را از اينجا مي‌توانيد دريافت كنيد. جهت استفاده از آن تنها كافي است چند سطر زير به فايل app.config يا web.config برنامه‌ي شما اضافه شوند:

<appSettings>
<add key="nhibernate-logger" value="NH3SQLLogger.LoggerFactory, NH3SQLLogger" />
</appSettings>

كليد nhibernate-logger ، به صورت مستقيم توسط NHibernate بررسي مي‌شود و صرف نظر از اينكه از كداميك از مشتقات NHibernate استفاده مي‌كنيد، با تمام آن‌ها كار خواهد كرد.
لازم به ذكر است كه اگر برنامه‌ي شما از نوع ASP.NET است، اين كتابخانه اطلاعات را در پوشه‌ي استاندارد App_Data ثبت خواهد كرد؛ در غيراينصورت فايل‌ها در كنار فايل اجرايي برنامه تشكيل خواهند شد.