Pregunta

Este es probablemente bastante sencillo, pero me parece que no puede encontrar una explicación razonable en cualquier documentación.

Estoy intentando utilizar un NHibernate.ISQLQuery y el uso de SetResultTransformer () para devolver un conjunto personalizado de los resultados de una consulta SQL personalizada. De esta manera:

    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>();
    }

De su análisis de los ejemplos, parece que en la consulta SQL que tengo que usar parámetros en el formato : param1 en lugar de @ param1 como lo haría en una norma consulta SQL. Si yo uso este último sintaxis de la consulta, se genera un error en qry.SetParameter ().

¿Hay una razón por la ISQLQuery / NHibernate les exige en este formato y no funcionará con la sintaxis normal?

¿Fue útil?

Solución

SQL Server utiliza @param, pero no todas las otras bases de datos hace. Por ejemplo, usa MySQL? Parámetro

NHibernate le permite intercambiar 1 aplicación de base de datos para otro con poca o ninguna reelaboración de su DAL. En él se establecen los parámetros basados ??en la base de datos configuró cuando la configuración de la configuración de NH.

Editar: También pienso: param surgió de Hibernate está dirigido a Oracle cuando se desarrolló inicialmente, ya usos de Oracle: param

Otros consejos

Phil ha contestado el "por qué"; por lo que tal vez pueda recomendar un "cómo"; ¿por qué no añadir un nuevo método de extensión al tipo IDbParameter (algo así como .GetNHibernateName()) que devolverá el nombre del parámetro con el "@" reemplazado con un ":"; que debe ser trivial de implementar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top