1

NHibernate の Session.SaveOrUpdate(myentity) への特定の呼び出しに対して、デフォルトよりも低い CommandTimeout を設定したいと考えています。それは可能ですか?

私のコードでは UnitOfWork パターンを使用しているため、特定の作業単位/セッションのタイムアウトも正常に機能します。

この質問の背景: 私は Web システムを持っています。保存したいログ/デバッグ情報がいくつかありますが、実際のデータベースの挿入に時間がかかる場合は、挿入に失敗してすぐに (1 秒未満) 戻るようにします。ただし、他のほとんどのデータベース操作では、デフォルトのコマンド タイムアウトで問題ありません。現在、インサートはほとんど常に超高速です。ただし、何らかの理由でデータベースが遅い場合 (毎日発生するものではない場合)、サイトの訪問者は、私が避けたい遅いログの影響を受けます。情報は重要ではないので、db 呼び出しのタイムアウトを設定するだけで簡単に解決できると思っていました。

4

1 に答える 1

0

更新のタイムアウトを個別に設定することはできません。

一方で:

  • Save//メソッドが必ずしも DB 呼び出しになるとは限りませんUpdateDelete呼び出しが発生する場所Flush(ID を持つエンティティの挿入を除く)
  • insert/updateステートメントは通常タイムアウトしません。そうであれば、セットアップに何か問題があります
  • グローバル は引き続き設定できますCommandTimeout。必要に応じて十分な長さにしてください。

更新: あなたのコメントを読んだ後、私が思っていたのとはのことをしたい (つまり、非常に短いタイムアウトを設定する) と言って、アーキテクチャに問題があることが明らかになりました。

書き込んでいる情報が現在のリクエストに関連していない場合は、「できるだけ速く」保存しようとして、十分に速くない場合に失敗するのではなく、キューを使用して (いずれかを選択)、その挿入をリクエスト、またはプロセス/マシンからでも。

于 2012-10-04T14:27:32.513 に答える