Frage

Dies ist wahrscheinlich ziemlich einfach, aber ich kann nicht eine vernünftige Erklärung in keiner Dokumentation zu finden scheinen.

Ich versuche, eine NHibernate.ISQLQuery und mit SetResultTransformer () verwenden einen benutzerdefinierten Satz von Ergebnissen aus einer benutzerdefinierten SQL-Abfrage zurückzukehren. Wie so:

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

Aus bei den Beispielen suchen, scheint es, dass in der SQL-Abfrage Ich habe Parameter zu verwenden, im Format : param1 statt @ param1 als würde ich in einem Standard SQL-Abfrage. Wenn ich die letztere Syntax in der Abfrage verwenden, wirft es einen Fehler bei qry.SetParameter ().

Gibt es einen Grund, warum ISQLQuery / NHibernate sie in diesem Format erfordert und wird nicht funktionieren mit der normalen Syntax?

War es hilfreich?

Lösung

SQL Server verwendet @param, aber nicht jede andere Datenbank tut. Zum Beispiel MySQL verwendet? Param

NHibernate ermöglicht es Ihnen, ein wenig für eine andere Datenbank-Implementierung auszutauschen, um ohne Nachbearbeitung Ihrer DAL. Sie legt die Basis-Parameter auf der Datenbank, die Sie konfiguriert, wenn Sie Setup die NH-Konfiguration.

Edit: Auch ich denke: param kommt aus dem Ruhezustand bei Oracle gezielt zu werden, wenn es wurde ursprünglich entwickelt, da Oracle Anwendungen: param

Andere Tipps

Phil hat das "Warum" beantwortet wurden; so vielleicht kann ich empfehlen ein „wie“; warum nicht einfach eine neue Erweiterung Methode zum IDbParameter Typ hinzufügen (so etwas wie .GetNHibernateName()), die die Parameternamen mit dem zurückkehren wird „@“ ersetzt mit einem „:“; dass sein trivial sollte zu implementieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top