Question

Ceci est probablement assez simple, mais je ne peux pas sembler trouver une explication raisonnable dans la documentation.

Je suis en train d'utiliser un NHibernate.ISQLQuery et en utilisant SetResultTransformer () pour retourner un ensemble personnalisé des résultats d'une requête SQL personnalisée. Comme ceci:

    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 regarder les exemples, il semble que dans la requête SQL que je dois utiliser des paramètres dans le format : param1 au lieu de @ param1 comme je le ferais dans une norme requête SQL. Si j'utilise la dernière syntaxe dans la requête, il renvoie une erreur à qry.SetParameter ().

Y at-il une raison pour laquelle ISQLQuery / NHibernate leur demande dans ce format et ne fonctionnera pas avec la syntaxe normale?

Était-ce utile?

La solution

SQL Server utilise @param, mais pas tous les autres bases de données ne. Par exemple, les utilisations de MySQL? Param

NHibernate vous permet d'échanger sur 1 application de base de données pour une autre avec peu ou pas de votre DAL reprise. Il définit les paramètres en fonction de la base de données configurée lors de la configuration de la configuration NH.

Edit: Je pense aussi: param est née d'Hibernate ciblé à Oracle quand il a été initialement développé, depuis Oracle utilise: param

Autres conseils

Phil a répondu "pourquoi"; alors peut-être que je peux recommander un « comment »; pourquoi ne pas simplement ajouter une nouvelle méthode d'extension du type de IDbParameter (quelque chose comme .GetNHibernateName()) qui renverra le nom du paramètre avec le « @ » remplacé par un « : »; qui devrait être trivial à mettre en œuvre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top