質問

C#.NET 3.5アプリケーションでは、NHibernate上でCastleProjectActiveRecordを使用しています。これは、MS SQL Server 2008を使用するデスクトップアプリケーションです。一括操作中のタイムアウト例外を防ぐために、ADOコマンドのタイムアウトを0に設定しました。 ジェネラコディセタグプレ

しかし、まだタイムアウト例外が発生しています。 NHibernateログには次のようなものが表示されます:

最初のどこか:

2010-10-02 06:29:47,746情報 NHibernate.Driver.DriverBase-ADO.NETコマンドのタイムアウトを0秒に設定

最後のどこか:

2010-10-02 07:36:03,020デバッグ NHibernate.AdoNet.AbstractBatcher- IDbCommandを閉じ、IDbCommandを開きます。 0 2010-10-02 07:36:03,382エラー NHibernate.Event.Default.AbstractFlushingEventListener -データベースの状態をセッションと同期できませんでした NHibernate.HibernateException:An 実行時に例外が発生しました バッチクエリ---> System.Data.S qlClient.SqlException:タイムアウト 期限切れ。タイムアウト期間が経過しました 手術が完了する前に または、サーバーが応答していません。で System.Data.SqlClient.SqlConnection.OnError(SqlException 例外、ブール値breakConnection)

どうして?これを修正する方法は?

役に立ちましたか?

解決

値0がタイムアウトなしを示すのは正しいです( MSDNドキュメントで定義)、ただし NHibernateのドライバーは、>= 0 、バッチャーの条件値が>であることを確認します0

したがって、タイムアウト値0でバッチ処理をオンに設定すると、値はdbコマンドに引き継がれないため、デフォルトのままになります。

これは仕様によるものであり、NHibernate開発者がバッチシナリオのタイムアウトの無効化を意図的に無効にした可能性があります。とにかくタイムアウトを無効にすることは悪い考えです。タイムアウトエラーで問題が発生した場合は、値を上げますが、無効にはしません。

NHibernate開発者にこれを確認してください。

他のヒント

web.configレベルではなく、特定のクエリのタイムアウトを設定しようとしている可能性があります(そうでない場合は、アプリケーションを調整する必要があります:))。

最近、私を助けてくれたこの答えを見つけました:

セッションを使用してNhibernateLINQコマンドタイムアウトを設定する方法.Query

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top