NHibernate - определить, где условие - PullRequest
0 голосов
/ 09 января 2011

В моем приложении пользователь может определить условия поиска. Он может выбрать столбец, установить оператор (равно, например, больше, меньше или равно и т. Д.) И указать значение. После того, как пользователь нажимает на кнопку, приложение должно выполнить поиск в базе данных с условием. Я использую NHibernate и спрашиваю меня, какой самый эффективный способ сделать это с NHibernate.

Должен ли я создать запрос с таким именем (столбец = имя, оператор = нравится, значение =% John%)

        var a = session.CreateCriteria<Customer>();
        a.Add(Restrictions.Like("Name", "%John%"));
        return a.List<Customer>();

Или я должен сделать это с HQL:

        var q = session.CreateQuery("from Customer where " + where);
        return q.List<Customer >();

Или есть другое решение?

Спасибо за вашу помощь.

С наилучшими пожеланиями, Томас

Ответы [ 2 ]

0 голосов
/ 09 января 2011

Вы можете использовать любой из них.Там вряд ли могут быть различия между ними.Но что бы вы ни делали, убедитесь, что имена ваших столбцов находятся в константах или сопоставлены с именем столбца, в противном случае ваш репозиторий будет тесно связан с определением модели, т. Е. Если вы обновите имя столбца, вам придется самостоятельно перейти к этим утверждениям.*

И когда вы создаете предложение where, вы получаете функцию, которая добавляет правильный запрос.вы, вероятно, будете иметь оператор регистра переключателя для того же.

0 голосов
/ 09 января 2011

По эффективности нет разницы.В версии HQL я бы предпочел использовать параметр вместо добавления части where в виде строки.Если вы используете NH3.0, вы можете также рассмотреть возможность использования QueryOver, чтобы не использовать строку для описания ваших свойств

...