NHibernate ISQLQuery SetParameter问题

时间:2010-12-13 06:50:03

标签: nhibernate parameters isqlquery

这可能相当简单,但我似乎无法在任何文档中找到合理的解释。

我正在尝试使用NHibernate.ISQLQuery并使用SetResultTransformer()从自定义SQL查询返回一组自定义结果。像这样:

    public virtual IList<T> GetSQLObject<T>(string sql, IDbParameter[] parameters = null)
    {
        ISQLQuery qry = _sess.CreateSQLQuery(sql);

        qry.SetResultTransformer(Transformers.AliasToBean(typeof(T)));    

        if (parameters != null) {
            foreach (IDbParameter parameter in parameters) {
                qry.SetParameter(parameter.Name, parameter.Value);
            }
        }

        return qry.List<T>();
    }

通过查看示例,似乎在sql查询中我必须使用格式:param1 而不是 @ param1 的参数,就像在标准中一样SQL查询。如果我在查询中使用后一种语法,它会在qry.SetParameter()处抛出错误。

ISQLQuery / NHibernate是否有理由要求这种格式,并且不能使用正常的语法?

2 个答案:

答案 0 :(得分:3)

SQL Server使用@param,但不是每个其他数据库都使用。例如,MySQL使用?param

NHibernate允许您将1个数据库实现替换为另一个数据库实现,几乎不需要重新编写DAL。它根据您在设置NH配置时配置的数据库设置参数。

编辑:我也认为:自从Oracle最初开发以来,Hramnate就是针对Oracle的,因为Oracle使用:param

答案 1 :(得分:0)

菲尔回答了“为什么”;所以也许我可以推荐一个“怎么样”;为什么不只是在IDbParameter类型(类似.GetNHibernateName())中添加一个新的扩展方法,它将返回参数名称,并将“@”替换为“:”;这应该是微不足道的。