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

我正在尝试使用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()上引发错误。

ISQLQLQUERY/NHIBERNATE需要这种格式而无法使用正常语法的原因是有原因的吗?

有帮助吗?

解决方案

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

NHIBERNATE允许您将1个数据库实现交换为另一个数据库实现,而DAL几乎没有重新处理。它基于您在设置NH配置时配置的数据库设置参数。

编辑:我也认为:param最初开发出甲骨文的冬眠,因为oracle用途:param

其他提示

菲尔回答了“为什么”。因此,也许我可以推荐一个“如何”;为什么不只是在 IDbParameter 类型(类似 .GetNHibernateName() )将返回用“@”替换为“:”的参数名称;这应该是微不足道的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top