вопросы о ORM мапперах, таких как nhibernate и т. д. - PullRequest
0 голосов
/ 19 марта 2009

Несколько вопросов о сопоставителях ORM, таких как nhibernate (для среды .net / c #).

  1. Когда запросы выполняются к базе данных sqlserver, используются ли внутри нее размеры параметров?

    paramaters.Add ("@ column1", SqlDataType.Int, 4)

  2. Все ли они используют отражение во время выполнения? т.е. ручное кодирование всегда немного быстрее?

  3. поддерживает ли временные таблицы, табличные переменные?

Ответы [ 3 ]

2 голосов
/ 20 марта 2009

ORM World является мощным и полнофункциональным, я думаю, что сегодня препятствия - это сами люди, это означает, что при использовании потребностей ORM нужно помнить об изменениях в мышлении приложений, архитектур и шаблонов.

Чтобы ответить на ваши вопросы:

  1. Выполнение запроса зависит от большего количества факторов, можно полностью настроить механизм / среду, чтобы использовать преимущества различных функций, таких как отложенное выполнение, будущие запросы (запросы, выполненные в будущем), несколько запросов и последнее, но Не в последнюю очередь, управление сессиями включает в себя:

    1. Отложенное выполнение основано на таких понятиях, как ленивая загрузка и ленивое выполнение, это означает, что запросы выполняются к базе данных только тогда, когда вы выполняете некоторые действия, такие как доступ к методам сеанса NHibernate, таким как ToList ( ) , еще один пример отложенного выполнения - использование LinqToNhibernate, где при обращении к определенным объектам выполняются запросы

    2. Будущие запросы, как я уже говорил, до того, как запросы будут выполнены в будущем, Айенде хорошо говорит об этом

    3. Несколько запросов - это запросы, которые могут быть "упакованы" вместе и выполнены за один раз, избегая многократных обращений к БД, и это может быть очень интересной функцией

    4. Управление сеансами, это еще одна глава для упоминания ... но имейте в виду, что если вы хорошо управляете своим сеансом, или лучше, пусть движок NHibernate хорошо управляет сеансом, иногда нет необходимости переходить DN для получения данных

во всех случаях такие инструменты, как NHibernate, генерируют запросы для вас, а параметризованные запросы хорошо управляются с параметрами, даже в зависимости от базового механизма БД и, соответственно, выбранного вами БД Диалект!

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

  2. Говоря о NHibernate, или, точнее говоря, полезно понимать, что вы имеете в виду, когда говорите о временных таблицах и временных данных. В таких условиях NHibernate, как я знаю, изначально не поддерживает временные таблицы, в смысле таблиц времени выполнения, но это может быть сделано, потому что NHibernate позволяет создавать сопоставление объектов во время выполнения, поэтому механизм данных Temp может быть реализован с использованием этого API

Надеюсь, я дал полезный ответ! ... и упс, извините за мой плохой английский!

0 голосов
/ 19 марта 2009
  1. NHibernate и SubSonic, LinqToSql, EF и я думаю, что большинство других используют параметризованный sql.

  2. Большинство ORM используют своего рода рефлексию, есть те, которые генерируют весь код и SQL-запросы для вас во время разработки, поэтому им не нужно использовать код рефлексии, это может работать немного быстрее, но это заставляет вас доменный беспорядок, и вы должны использовать их приложение для регенерации всего вашего кода.

  3. Я почти уверен, что все они не поддерживают это, но у большинства есть способ, которым вы можете использовать SP и Views для этого.

Вы можете проверить эту серию NHibernate Screencast http://www.summerofnhibernate.com/

0 голосов
/ 19 марта 2009

nhiberate использует оптимизированную форму отражения, которая при запуске создает прокси-объекты, которые работают лучше, чем обычное отражение, поскольку это требует единовременных затрат. У вас также есть возможность отключить эту функцию, в которой nhibernate ведет себя более типичным образом с постоянным использованием отражения.

Эта функция устанавливается с помощью следующей клавиши:

<add key="hibernate.use_reflection_optimizer" value="true" />

Nhibernate может использоваться с именами таблиц переменных. См. этот SO поток для хорошего решения.

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