今天在使用NH连接MySQL的时候,突然想起来MySQL好像并没有类似于SQL SERVER Profiler的功能,那以后调试不是很操蛋吗?搞了半天,发现并没有办法,只好拐个弯解决问题:将NH中的生成的代码直接在VS中输出显示。
/// <summary>
/// SQL语句监视
/// </summary>
public class SQLWatcher : EmptyInterceptor
{
public override NHibernate.SqlCommand.SqlString OnPrepareStatement(NHibernate.SqlCommand.SqlString sql)
{
System.Diagnostics.Debug.WriteLine("===============SQL语句 - Start:===============");
System.Diagnostics.Debug.WriteLine(" " + sql);
System.Diagnostics.Debug.WriteLine("===============SQL语句 - End:===============");
return base.OnPrepareStatement(sql);
}
}
扩展方法:
/// <summary>
/// 创建可监视的SESSION
/// </summary>
/// <param name="sessionFactory"></param>
/// <returns></returns>
public static ISession CreateSqlWatcher(this ISessionFactory sessionFactory)
{
return sessionFactory.OpenSession(new SQLWatcher());
}
使用方法:
public IList<SysUser> Test()
{
ISession session = NHibernateHelper.SessionFactory.CreateSqlWatcher();
var list = session.Query<SysUser>().ToList();
var list2 = session.Query<SysUser>().Select(m => new {m.Id, m.UserName}).ToList();
return list;
}
产生的两条SQL语句