NHibernate - SQL príkazy do DEBUG okna

Publikoval Michal Kočí dňa 24.9.2008 o 21:45 v kategórii .Net

Pri vývoji ASP.Net aplikácie používajúcej NHibernate sa z času na čas vyskutne situácia, kedy by bolo dobré odchytiť SQL príkaz, ktorý lezie do databázy. Ak používate MS SQL Server, môžete použiť Profiler, ale rýchlejšie riešenie je presmerovať výstup z konzoly priamo do DEBUG okna.

NHibernate vie vypisovať SQL príkazy do konzolového okna. Táto možnosť sa dá zapnúť v konfigurácii session factory, napríklad ak používate web.config konfiguráciu, tak takto:

<property name="hibernate.show_sql">true</property>

Vtedy NHibernate na logovanie volá Console.Write a Console.WriteLine, čo je fajn v prípade konzolových aplikácií, ale trochu horšie v prípade webových ASP.Net aplikácií. Riešenie je však jednoduché a to presmerovať OUT konzolu tam kam chcete. Presmerovať môžete na triedu TextWriter a letmým pohľadom na NHibernate cez Reflector zistíte, že NHibernate posiela SQL cez vyššie dve spomenuté metódy a to tie, ktoré majú jedíný parameter a ten je typu string.

Preto si vytvoríme triedu ktorá bude dediť z triedy TextWriter a prepíše tieto dve metódy:

    public class DebugTextWriter : TextWriter

    {

        public override System.Text.Encoding Encoding

        {

            get { return System.Text.Encoding.Default; }

        }

 

        public override void Write(string value)

        {

            Debug.WriteLine(value);

        }

 

        public override void WriteLine(string value)

        {

            Debug.WriteLine(value);

        }

    }

No a potom niekde, pred tým ako spustíme prvý príkaz ktorý chceme logovať, dáme presmerovať OUT konzolu:

Console.SetOut(new DebugTextWriter());

Mohlo by ťa tiež zaujímať

Páčil sa ti príspevok?

Zdieľaj príspevok alebo si ho odlož na neskôr

Sleduj ma

Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.