最近接觸到一個用SPRing.Net結(jié)合NHIbernate的項(xiàng)目,第一次使用,有很多配置,數(shù)據(jù)操作一旦出問題,很難找到原因,那么如何查看NHibernate發(fā)送給數(shù)據(jù)庫的SQL語句呢?
當(dāng)然我們可以通過log4net記錄日志來查看,但稍微有些繁瑣,于是找到了另一種方法來查看。
NHIbernate中的IInterceptor接口中定義的OnPrepareStatement(SqlString sql)可以觀察到生成的sql,由EmptyInterceptor來實(shí)現(xiàn)。
[Serializable]public class EmptyInterceptor : IInterceptor{ //其他方法省略 public virtual SqlString OnPrepareStatement(SqlString sql);}我們所要做的就是繼承EmptyInterceptor,然后重寫OnPrepareStatement方法。
public class SQLWatcher : EmptyInterceptor{ public override SqlCommand.SqlString OnPrepareStatement(SqlCommand.SqlString sql) { return base.OnPrepareStatement(sql); }}在重寫的方法里,你就可以用任何方法來監(jiān)控你的所想要監(jiān)控的SQL語句了。
最后在創(chuàng)建Isession的地方加入你所創(chuàng)建的攔截類就可以了。
public static ISession OpenSession(){ return SessionFactory.OpenSession(new SQLWatcher());}運(yùn)行效果如下:

轉(zhuǎn)載請注明來源:http://m.survivalescaperooms.com/caoming/p/4147600.html
新聞熱點(diǎn)
疑難解答
圖片精選