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 を使用しています。

Hibernate エラー

4

2 に答える 2

1

Hibernate は決して例外を飲み込みません。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 に答える