質問

これはおそらくかなり簡単ですが、ドキュメントで合理的な説明を見つけることができないようです。

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()でエラーがスローされます。

iSQlquery/nhibernateがこの形式でそれらを必要とし、通常の構文で動作しない理由はありますか?

役に立ちましたか?

解決

SQL Serverは@Paramを使用しますが、他のすべてのデータベースが使用するわけではありません。たとえば、mysqlは?paramを使用します

Nhibernateを使用すると、DALをほとんどまたはまったく再加工して、1つのデータベース実装を別のデータベース実装に交換できます。 NH構成をセットアップするときに構成したデータベースに基づいてパラメーターを設定します。

編集:また私は思う:パラメートは、Oracleが使用しているため、最初に開発されたときにHibernateがOracleを標的にされることから生まれました:Param

他のヒント

フィルは「なぜ」に答えました。だから、おそらく私は「方法」を勧めることができます。新しい拡張法を追加してみませんか IDbParameter タイプ(ようなもの .GetNHibernateName() )パラメーター名は「@」が「 ":"に置き換えられて返されます。それは実装するのに些細なことです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top