1

我有一个在 IlSpy 中反编译的项目和下面的代码。在哪里可以找到原始 SQL 查询?criteria.List() 如何知道选择使用哪个?

    protected object ListOne(ISession session, DbBaseArgs args)
    {
            ICriteria criteria = session.CreateCriteria(((DbListArgs)args).DbType);
            criteria.SetMaxResults(1);
            for (int i = 0; i < ((DbListArgs)args).DbExpressions.Count; i++)
            {
                if (((DbListArgs)args).DbExpressions[i] is Order)
                {
                    criteria.AddOrder((Order)((DbListArgs)args).DbExpressions[i]);

                }
                else
                {
                    criteria.Add((ICriterion)((DbListArgs)args).DbExpressions[i]);

                }
            IList results = criteria.List();
            object result;
            if (results != null && results.Count > 0)
            {
                result = results[0];
            }
            else
            {
                result = null;
            }
            return result;
}
4

2 回答 2

0

你的选择是

  1. 运行您的应用程序并查看日志
  2. 编写一些代码来生成要生成的 SQL
  3. 试试NHProf

(来自链接的答案):

public String GetGeneratedSql(ICriteria criteria)
{
    var criteriaImpl = (CriteriaImpl) criteria;
    var sessionImpl = (SessionImpl) criteriaImpl.Session;
    var factory = (SessionFactoryImpl) sessionImpl.SessionFactory;
    var implementors = factory.GetImplementors(criteriaImpl.EntityOrClassName);
    var loader = new CriteriaLoader((IOuterJoinLoadable) factory.GetEntityPersister(implementors[0]), factory, criteriaImpl, implementors[0], sessionImpl.EnabledFilters);

    return loader.SqlString.ToString();
}
于 2012-11-26T16:14:10.813 回答
0

反编译并不能帮助您找到原始 SQL 查询。您可以尝试为在调试级别命名的记录器添加日志, NHibernate.SQL并且您应该在附加程序中看到配置了向数据库发出的查询。例如,在日志配置中添加如下内容:

<logger name="NHibernate.SQL" additivity="false">
    <level value="ALL"/>
    <appender-ref ref="NHibernateSQLFileLog"/>
</logger>
于 2012-11-26T16:01:23.430 回答