0

FindAllByPropertyCastle Active Recordで呼び出すと、インスタンスOnUpdateで重複チェックを行うため、スタックオーバーフローが発生しOnUpdateます。次のコードを検討してください。なぜそれが呼ばれるのOnUpdateですか?どうすればそれを止めることができますか?

protected override void OnUpdate()
{
    if (FindAllByProperty("Title", this.Title).Length > 1)
        throw new Exception("duplicate Message in update");

    base.OnUpdate();
}
4

1 に答える 1

2

おそらく起こっていることは次のとおりです。

  1. アプリ内の何かがセッションをフラッシュします。
  2. フラッシュ中、NHibernate / ActiveRecordはOnUpdate()を実行します
  3. OnUpdate()はFindAllByProperty()を呼び出します
  4. FindAllByProperty()は同じセッション内でクエリを実行しようとしますが、セッションはまだダーティであるため、NHibernateはセッションをフラッシュします。
  5. 2に戻ります。

したがって、スタックオーバーフロー。

これを回避するには、新しいセッション内でFindAllByProperty()を実行してみてください。

using (new SessionScope())
  if (FindAllByProperty("Title", this.Title).Length > 1)
     throw new Exception("duplicate Message in update");
于 2010-07-25T17:07:57.903 に答える