вопросы о картографах ORM, таких как nhibernate и т. д.

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

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

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

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

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


person mrblah    schedule 19.03.2009    source источник


Ответы (3)


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

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

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

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

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

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

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

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

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

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

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

person Hoghweed    schedule 20.03.2009

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

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

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

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

person Bayard Randel    schedule 19.03.2009

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

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

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

Вы можете проверить это в серии скринкастов NHibernate http://www.summerofnhibernate.com/

person Yitzchok    schedule 19.03.2009