Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с NHibernate v.2.1, генегация SQL дополнительных запросов 
:(
    Опции темы
midavik
Дата 5.10.2009, 15:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.6.2007

Репутация: нет
Всего: 1



Есть проект с использованием NHibernate v.1.2. Возникла необходимость перейти на
NHibernate v.2.1.

После портирования заметил существенное замедление работы исполнения запросов генерированных NHibernate v.2.1, а именно заметил генерирование лишних запросов, хотя сам код программы не менял.

Например есть две тестовые таблицы: MDPersons и MDPhoneType.
На уровне сервера БД между этими двумя таблицами по полю PhoneTypeID связи нет.
Поэтому в таблице MDPersons в поле PhoneTypeID могут быть записаны значения которых
нет в поле PhoneTypeID таблицы MDPhoneType.
Эта связь создается в программе в маппинг файле, который выглядит след. образом:
Код

  <!-- PhoneType -->
  <class name="PhoneType" table="MDPhoneType" dynamic-update="true" >
    <id name="PhoneTypeID" column="PhoneTypeID" type="string">
      <generator class="assigned" />
    </id>

    <property name="Phone_Type" column="PhoneType" type="string" />
  </class>

  <!-- Persons -->
  <class name="Person" table="MDPersons" dynamic-update="true">
    <id name="PersonID" type="string">
      <generator class="assigned" />
    </id>

    <property name="PersonName" column="PersonName" type="string" />
    <property name="PersonPhone" column="PersonPhone" type="string" />
    
    <many-to-one name="PhoneType" column="PhoneTypeID" class="PhoneType" not-found="ignore" fetch="join" />
  </class>


Т.е. когда через nHibernate достаешь записи таблицы MDPersons, nHibernate генерирует след. запрос:
Код

SELECT this_.PersonID as PersonID36_1_, this_.PersonName as PersonName36_1_, this_.PersonPhone as PersonPh3_36_1_, this_.PhoneTypeID as PhoneTyp4_36_1_, phonetype2_.PhoneTypeID as PhoneTyp1_35_0_, phonetype2_.PhoneType as PhoneType35_0_ FROM MDPersons this_ left outer join MDPhoneType phonetype2_ on this_.PhoneTypeID=phonetype2_.PhoneTypeID


но помимо этого, для каждой копии значения из поля PhoneTypeID таблицы MDPersons, которого нет в поле PhoneTypeID таблицы MDPhoneType генерируется по одному запросу
вида:
Код

SELECT phonetype0_.PhoneTypeID as PhoneTyp1_35_0_, phonetype0_.PhoneType as PhoneType35_0_ FROM MDPhoneType phonetype0_ WHERE phonetype0_.PhoneTypeID=@p0;@p0 = ''


Если таких строк с пустым значением (не NULL) в таблице будет например 200 то генерируются 200 копий запроса:
Код

SELECT phonetype0_.PhoneTypeID as PhoneTyp1_35_0_, phonetype0_.PhoneType as PhoneType35_0_ FROM MDPhoneType phonetype0_ WHERE phonetype0_.PhoneTypeID=@p0;@p0 = ''


Не могу понять почему, ведь при использовании версии NHibernate v.1.2 такого не было ???

Кто-нибудь может подсказать в чем причина?

Добавлено через 1 минуту и 3 секунды
структура таблиц и тестовые данные в них

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  a.JPG 37,34 Kb
PM MAIL   Вверх
midavik
Дата 7.10.2009, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 13.6.2007

Репутация: нет
Всего: 1



что никто не в курсе как решить эту проблему?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.0753 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.