2013-05-21 1 views
1

У меня есть объект, который отображает коллекцию компонентов следующим образом:Почему NHibernate проглатывает ошибку SQL из ленивой загрузки?

<class name="TeacherResource" table="TeacherResource"> 
    <id name="TeacherResourceId"> 
     <generator class="guid"/> 
    </id> 

    <!-- irrelevant properties here... --> 

    <bag name="HelpfulLinks" order-by="BogusColumnName"> 
     <key column="TeacherResourceId"/> 
     <composite-element class="HelpfulLink"> 
      <property name="Href"/> 
      <property name="Display"/> 
     </composite-element> 
    </bag> 
</class> 

Сначала я не получал никаких данных обратно для коллекции, то я понял, что неверное имя столбца в там заказывая коллекцию. NHibernate не генерирует исключение, но если вы просмотрите свойство в отладчике после того, как свойство lazy-loaded, то определено InnerException, которое указывает на ошибку.

Зачем NHibernate ловить эту ошибку? Я на .NET 4.0/NH 3.3.1.

NHibernate error

ответ

1

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

+0

Правильно, это действительно привязка данных. Интересно, что, когда я разрешаю связывание через элементы управления FormView/ObjectDataSource, исключение проглатывается. Если я свяжусь вручную, исключение будет выбрано. –

1

NHibernate никогда не глотает Exception. Пожалуйста, никогда не ожидайте этого от NHibernate и никогда подозреваемый NHibernate.

Если вы хотите, есть мой совет: всегда начинайте подозревать наш (NHibernate consumer) код.

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

Из набора информации, содержащейся в этом вопросе, трудно сказать, где проблема. Некоторые идеи:

1) Коллекция HelpfulLinks загружается лениво (как показывает фрагмент). Это может случиться, что он никогда не касался времени исполнения. Исключение NHibernate.Exceptions.GenericADOException: невозможно инициализировать коллекцию. может быть запущен только в том случае, если был запрошен , инициализируйте его.

2) Только предположение, очень маловероятно, могут быть некоторые общие Обработчик в растворе на вершине DataLayer ... преобразования исключений в нечто другое (на самом деле проглотить их)

Я не есть больше идей. Но когда

  • Я создал форму царапины сценарий с parent/child,
  • Я последовал ваше отображение (и установить неверное имя столбца в порядок-по,
  • я получил исключение в данный момент я прикоснулся к Children коллекция.

Другими словами, пожалуйста, старайтесь соблюдать код больше.