1

我有一个实体,它映射一组组件,如下所示:

<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 上。

NHibernate 错误

4

2 回答 2

1

NHibernate 永远不会吞下异常。请不要指望 NHibernate 会这样,也不要怀疑NHibernate。

如果你愿意,我的建议是:总是开始怀疑我们的(NHibernate 消费者)代码。

没有人是完美的,即使 NHibernate 也可能有错误(看看最新版本的更改日志,已经修复了多少错误)。但是,集合映射是如此标准且如此常用的部分,以至于它几乎无法将错误保留在那里。

从问题包含的信息集中,很难说问题出在哪里。一些想法:

1) 集合HelpfulLinks被延迟加载(如代码片段所示)。它可能发生,它在运行时从未被触及。异常NHibernate.Exceptions.GenericADOException: could not initialize a collection只有在有初始化它的请求的情况下才会被触发。

2)只是一个猜测,不太可能,在DataLayer之上的解决方案中可能有一些常见的处理程序......将异常转换为其他东西(实际上是吞下它们)

我没有更多的想法。但当

  • 我用一个创建了一个从头开始的场景parent/child
  • 我遵循了您的映射(并将错误的列名设置为 order-by,
  • 我在接触Children收藏的那一刻就收到了例外。

换句话说,请尝试更多地观察代码。

于 2013-05-22T04:06:56.247 回答
1

如前所述,NHibernate 从不吞下异常。该集合很可能是由数据绑定加载的,在这种情况下,数据绑定会吞下异常。

于 2013-05-22T05:50:21.803 回答