2012-01-13 8 views
0

3番目のオブジェクトが(同じく連続して)リポジトリから取得されると、次のエラーが発生します。最初の取得は成功しますが、詳細を取得するために戻ると、残りの負荷が発生し、これが表示されます。遅延ロード動作でNHibernateが失敗する

NHibernate.Exceptions.GenericADOException: could not load an entity 

私はすべてのデータを上書きしており、3番目の項目については全く奇妙なことはありません。すべての参照オブジェクトと同様に完全に正常です。しかしながら、問題は一貫しており、おそらくタイミングの問題ではありません。他のオブジェクトが同じSessionオブジェクトを正常に使用しています。

私も同時にNHibernateのログに以下を参照してください。

NHibernate.Util.ADOExceptionReporter System.InvalidOperationException: Invalid attempt to call MetaData when reader is closed. 

は、このエラーの私の研究によると、返され、最後を過ぎて反復した後、NHibernateのは、リーダーを使用しようとしていることを意味し行。しかし、NHibernate自体からの最初の取得によって行が生成されたため、その行為がどのように起こるのか分かりません(これは現在、遅延読み込みと一緒になっています)。

私は困惑しています。

+0

SQLServerを使用していますか?プロファイラを使って何が起こっているのか分かりますか? –

+0

はい、私はすでにshow_sqlを有効にしていて、プロファイラには驚きはありません。よく見えます。 – Tevya

+0

ここには奇妙なことがあります。他のすべての型の場合、クエリには "exec sp_reset_connection"が実行されますが、最終的には失敗するオブジェクト型(Passenger)では実行されません。うーん。 – Tevya

答えて

0

犯人が見つかりました。 Passengerクラスは、コンポーネントを使用してマップされました。これらのコンポーネントの1つにCustomTypeが指定されています。そのコンポーネントがコメントアウトされたら、問題はなくなりました。コンポーネントが復元されると、問題が戻されました。

今のところ、これは回避策として役立ちます。

ところで、コンポーネントはSQLiteベースのユニットテストで動作しました。 SQL Server 2008に移行しただけで問題が発生しました。

関連する問題