NHibernate ISQLQuery设置参数问题

NHibernate ISQLQuery设置参数问题,nhibernate,parameters,isqlquery,Nhibernate,Parameters,Isqlquery,这可能相当简单,但我似乎无法在任何文档中找到合理的解释 我尝试使用NHibernate.ISQLQuery并使用SetResultTransformer()从自定义SQL查询返回一组自定义结果。像这样: public virtual IList<T> GetSQLObject<T>(string sql, IDbParameter[] parameters = null) { ISQLQuery qry = _sess.CreateSQLQ

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

我尝试使用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>();
    }
公共虚拟IList GetSQLObject(字符串sql,IDbParameter[]parameters=null) { ISQLQuery qry=\u sess.CreateSQLQuery(sql); qry.SetResultTransformer(Transformers.AliasToBean(类型(T)); if(参数!=null){ foreach(参数中的IDBPAMETER参数){ qry.SetParameter(parameter.Name,parameter.Value); } } 返回qry.List(); } 从示例来看,在sql查询中,我似乎必须使用以下格式的参数:param1,而不是像在标准sql查询中那样使用@param1。如果在查询中使用后一种语法,它会在qry.SetParameter()处抛出错误


为什么ISQLQuery/NHibernate需要这种格式,而不能使用正常语法

SQL Server使用@param,但并非所有其他数据库都使用。例如,MySQL使用?param

NHibernate允许您将1个数据库实现替换为另一个数据库实现,而不需要对DAL进行任何修改。它根据设置NH配置时配置的数据库设置参数


编辑:我还认为:param源于Hibernate最初开发时针对Oracle的目标,因为Oracle使用:param已经回答了“为什么”;所以也许我可以推荐一个“如何”;为什么不向
IDbParameter
类型(类似于
.GetNHibernateName()
)添加一个新的扩展方法,该方法将返回参数名,并将“@”替换为“:”;这应该很容易实现。

您能详细介绍一下这个扩展方法吗?由于传入的参数名不包含前缀字符“:”或“@”,我们如何用扩展方法覆盖该内部前缀字符?