Система NHibernate. IndexOutOfRangeException

Мне 21 год, и я использую энергию. Это - реальный шаг от других редакторов программирования, которых я использовал, и я рекомендую кому-либо еще в курсах информатики испытать его.

13
задан Stefan Steinegger 3 November 2009 в 13:53
поделиться

3 ответа

обычно, когда вы получаете IndexOutOfRangeException в NHibernate, это происходит потому, что вы дважды сопоставили свойство или сопоставили два свойства с одним и тем же столбцом. Проверьте имена столбцов.

Возможно, это происходит случайно, потому что конфликт проявляется только в определенной совокупности данных.

13
ответ дан 1 December 2019 в 21:25
поделиться

You've put a length=50 in the mapping file, are you sure the database column is varchar(50), if NHibernate fetches a longer string it could be causing your error. I would usually leave the length attribute out.

0
ответ дан 1 December 2019 в 21:25
поделиться

Мы - и другие - также сталкивались с этой проблемой в последнее время и в прошлом. Похоже, это связано с многопоточным доступом к небезопасному SqlConnection . Следующий действительно длинный (!) пост содержит больше примеров и некоторые подробности по проблеме: SQLDataReader.GetOrdinal () редко дает сбой с IndexOutOfRange . Там bbzippo утверждает:

«Очевидно, что SqlDataReader читает набор результатов, оставшийся от предыдущий запрос, выполненный на том же соединение пару секунд назад ».

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

Некоторые из предложений, сделанных в данный поток:

  1. Отключить пул соединений, чтобы ваша строка подключения выглядела, например, как «Data Source = Sql2005; Initial Catalog = MyDbName; User Id = MyLogin; Password = MyPass; Pooling = false» (это, скорее всего, снизит производительность вашего приложения, но обязательно сработает)
  2. Выполните рефакторинг всего статического кода, ссылающегося на ваши экземпляры SqlConnection на не- static
  3. Исправьте возможный многопоточный доступ к вашим SqlConnection s (это может быть не так просто ...)

Я все еще пытаюсь найти источник ошибки в нашем приложении, но это не так просто, потому что мне не удалось воспроизвести это за пределами нашей живой среды. Мэтт Нееринкс [MSFT] предлагает в одном из своих ответов в вышеупомянутом сообщении использовать разные строки подключения и, следовательно, разные пулы соединений для разных частей вашего приложения, чтобы помочь сузить источник проблемы.

Еще одно прочтение, которое я нашел об этой проблеме, было на форумах спящего режима: https://forum.hibernate.org/viewtopic.php?p=2386963 , где у одного из плакатов также были проблемы с отложенной загрузкой. в многопоточном сценарии.

Надеюсь, это направит любого в правильном направлении к исправлению.

Оливер

П.С. Это копия моего ответа на Nhibernate FieldNameLookup выдает исключение IndexOutOfRangeException

7
ответ дан 1 December 2019 в 21:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: