‫‫استفاده از Stored Procedure و Trigger در NHibernate و تاثیر آنها بر Caching

در رابطه با NHibernate رایج است که هر جا حس کردیم NHibernate یا مهارت خودمان در استفاده از آن دچار محدودیت است فوراً دست به کار شده و ضمن دور زدن مکانیزم NHibernate session managment مستقیماً از SQL در برنامه‌مان استفاده کنیم. مثلاً وقتی که نمی‌توانیم از eventهای مرتبط با Save/Update در NHibernate به درستی استفاده کنیم یک تریگر روی جدول مورد نظر می‌گذاریم. یا مثلا وقتی که سرعت update جدول یا فیلدی خیلی پایین است، حالا یا به علت محدودیت‌های خود NHibernate یا به علت عدم استفاده صحیح خودمان، آن وقت یک Stored Procedure نوشته و عملیات مورد نظر را به جای NHibernate از طریق آن انجام می‌دهیم.

این نوع دور زدن NHibernate به غیر از این که نرم‌افزار را از لحاظ فناوری دو تیکه و ناخوانا می‌کند، مشکل دیگری نیز دارد. چون این طور کارها از دروازه NHibernate session management رد نمی‌شوند، NHibernate هم از تغییرات داده‌ای آنها بی‌خبر مانده و نمی‌تواند Cache را (چه سطح اول و چه سطح دوم) به خوبی به روز رسانی کند. در نتیجه مقادیر موجود در Cache نامعتبر شده و آنچه که از Cache دریافت می‌داریم ممکن است قدیمی و به درد نخور باشد. چون یک تریگر یا sp دور از چشم NHibernate آنها را تغییر داده است. در این طور مواقع تنها کاری که می‌توان کرد عدم استفاده از روش‌های این چنینی یا چشم پوشی از Caching می‌باشد.