NHibernate ISQLQuery SetParameter проблема - PullRequest
0 голосов
/ 13 декабря 2010

Это, вероятно, довольно просто, но я не могу найти разумного объяснения в какой-либо документации.

Я пытаюсь использовать 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 требует их в этом формате и не будет работать с обычным синтаксисом?

Ответы [ 2 ]

3 голосов
/ 13 декабря 2010

SQL Server использует @param, но не все остальные базы данных используют. Например, MySQL использует? Param

NHibernate позволяет вам заменить одну реализацию базы данных на другую с минимальной переработкой вашего DAL. Он устанавливает параметры на основе базы данных, настроенной вами при настройке конфигурации NH.

Редактировать: Также я думаю: param появился из-за того, что Hibernate был нацелен на Oracle, когда он был изначально разработан, так как Oracle использует: param

0 голосов
/ 13 декабря 2010

Фил ответил «почему»;так что, возможно, я могу порекомендовать «как»;почему бы просто не добавить новый метод расширения к типу IDbParameter (что-то вроде .GetNHibernateName()), который вернет имя параметра с "@", замененным на ":";это должно быть тривиально для реализации.

...