nhibernate isqlquery setParameter问题
-
09-10-2019 - |
题
这可能是相当简单的,但我似乎在任何文档中都找不到合理的解释。
我正在尝试使用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()
)将返回用“@”替换为“:”的参数名称;这应该是微不足道的。
不隶属于 StackOverflow