Почему Castle Active Record `FindAllByProperty` вызывает` OnUpdate`? - PullRequest
0 голосов
/ 25 июля 2010

Когда я вызываю FindAllByProperty, он вызывает OnUpdate в замке Active Record. Это вызывает переполнение стека, потому что я делаю некоторую проверку дублирования на OnUpdate экземпляре.Рассмотрим следующий код.Почему он звонит OnUpdate?Как это остановить?

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

    base.OnUpdate();
}

1 Ответ

2 голосов
/ 25 июля 2010

Вот что, вероятно, происходит:

  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");
...