我有一个映射组件集合的实体,如下所示:
<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不会抛出异常,但如果在属性延迟加载后在调试器中查看属性,则会定义InnerException
来指示错误。
为什么NHibernate会捕获此错误?我在.NET 4.0 / NH 3.3.1上。
答案 0 :(得分:1)
NHibernate永远不会吞下Exception。请不要期望来自NHibernate并且从不怀疑 NHibernate。
如果您愿意,我的建议是:始终开始怀疑我们的(NHibernate消费者)代码。
没有人是完美的,即使NHibernate可能有一个错误(并看看 在最新版本的更改日志中,已经有多少错误 固定的)。但是,集合映射是如此标准,因此经常使用 部分原因是它很难将错误保留在那里。
根据问题所包含的信息集,很难说问题出在哪里。一些想法:
1)懒惰加载集合HelpfulLinks
(如代码段所示)。可能会发生,它从未在运行时触及过。异常 NHibernate.Exceptions.GenericADOException:无法初始化集合只有在遇到初始化的请求时才会被触发。
2)只是一个猜测,非常不可能,在DataLayer之上的解决方案中可能会有一些常见的处理程序...将异常转换为其他东西(事实上吞下它们)
我没有更多的想法。但是什么时候
parent/child
,Children
集合的那一刻,我收到了异常。 换句话说,请尝试更多地观察代码。
答案 1 :(得分:1)
正如已经说过的那样,NHibernate永远不会吞下Exception。很可能该集合是通过数据绑定加载的,在这种情况下,数据绑定吞噬了异常。