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());
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.