powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / проблема с nHibernate v.2.1.
1 сообщений из 1, страница 1 из 1
проблема с nHibernate v.2.1.
    #36228074
midavik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть проект с использованием nHibernate v.1.2. Возникла необходимость перейти на
nHibernate v.2.1.

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

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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
  <!-- 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 генерирует след. запрос:
Код: plaintext
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 генерируется по одному запросу
вида:
Код: plaintext
SELECT phonetype0_.PhoneTypeID as PhoneTyp1_35_0_, phonetype0_.PhoneType as PhoneType35_0_ FROM MDPhoneType phonetype0_ WHERE phonetype0_.PhoneTypeID=@p0;@p0 = ''

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

Код: plaintext
SELECT phonetype0_.PhoneTypeID as PhoneTyp1_35_0_, phonetype0_.PhoneType as PhoneType35_0_ FROM MDPhoneType phonetype0_ WHERE phonetype0_.PhoneTypeID=@p0;@p0 = ''


Не могу понять почему, ведь при использовании версии nHibernate v.1.2 такого не было ???
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / проблема с nHibernate v.2.1.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]