Какова рекомендация по использованию NHibernate CreateSQLQuery? - PullRequest
1 голос
/ 23 февраля 2011

Моя интуиция говорит мне, что опытные пользователи NHibernate были бы против этого, и я искал фактический анализ по этому вопросу и ничего не нашел, я хотел бы получить ответ на эти вопросы:

Каковы плюсы / минусы его использования? Есть ли какие-либо последствия для производительности, хорошие или плохие (например, использовать это для вызова хранимых процедур?) В каких сценариях мы должны использовать / избегать этого? Кто должен использовать / избегать этого?

В принципе, каковы причины использовать / избегать его и почему?

Ответы [ 2 ]

7 голосов
/ 23 февраля 2011

CreateSQLQuery существует по причине, которая выполняет запросы, которые:

  • Не поддерживается
  • Трудно написать

с использованием любого издругие методы.

Конечно, обычно это последний выбор, потому что:

  • Это не объектно-ориентированный (т. е. вы вернулись к мысли о таблицах и столбцах вместо сущностей, свойств иотношения)
  • Связывает вас с физической моделью
  • Связывает вас с конкретной СУБД
  • Обычно вы заставляете вас выполнять больше работы для извлечения сущностей
  • Он не поддерживает автоматически такие функции, как подкачка

Но если вы считаете, что это необходимо для определенного запроса, продолжайте.Обязательно изучите все остальные методы (HQL, Linq, QueryOver, Criteria и Get), чтобы избежать ненужной работы.

2 голосов
/ 23 февраля 2011

Одна из главных причин избегать использования SQL и использования HQL - избегать зависимости базы кода от типа СУБД (например, MySQL, Oracle). Другая причина заключается в том, что вы должны сделать свой код зависимым от имен таблиц и столбцов, а не от имен и свойств сущностей.

Если вы сравниваете необработанный SQL с использованием провайдера NHibernate LINQ, есть и другие веские причины обращаться к запросам LINQ (когда это работает), например, безопасность типов и возможность использовать поиск ссылок VS, чтобы определить, в каких запросах определенный ссылка на таблицу или столбец.

Мое мнение таково, что CreateSQLQuery () является опцией "последнего выхода". Это происходит потому, что есть вещи, которые вы не можете сделать с другими API-интерфейсами NHibernate, но этого следует избегать, поскольку это более или менее противоречит самой идее использования NHibernate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...