NHibernate ISQLQuery设置参数问题
这可能相当简单,但我似乎无法在任何文档中找到合理的解释 我尝试使用NHibernate.ISQLQuery并使用SetResultTransformer()从自定义SQL查询返回一组自定义结果。像这样: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
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()
)添加一个新的扩展方法,该方法将返回参数名,并将“@”替换为“:”;这应该很容易实现。您能详细介绍一下这个扩展方法吗?由于传入的参数名不包含前缀字符“:”或“@”,我们如何用扩展方法覆盖该内部前缀字符?