NHibernate代码监视

Posted Jade

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NHibernate代码监视相关的知识,希望对你有一定的参考价值。

今天在使用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语句

以上是关于NHibernate代码监视的主要内容,如果未能解决你的问题,请参考以下文章

NHibernate 通过代码 ManyToOne 与 CompositeIdentity 进行映射

NHibernate OneToMany 代码映射

NHibernate 和代码优先

代码优先实体框架或 NHibernate

如何通过代码将 Id 映射到 NHibernate 映射中的私有支持字段?

通过代码进行 Nhibernate 一对一映射