Как обновить Fact при использовании статических правил ISession во время выполнения NRules

Используя NRules, я хочу иметь возможность создавать сеанс, вставлять факты, запускать его и завершать, и пока сеанс еще жив в памяти (статическая переменная), я хочу вызвать обновление факта.

private static ISession session;  //this is instantiated when bulding the rules dinamically
public void RulesTest(RulesTest command)
    {
        //entities holds ALL facts ever inserted in session
        var entities = _session.Query<Entity>();
        _session.Insert(command.Fact);

        Rule rule = GetRule();
        _session.Insert(rule.Condition);
        _session.Insert(rule.Action);

        _session.Fire();
    }

Это запускает правило и делает все правильно. Теперь я хочу добавить возможность обновления ОДНОГО ЖЕ ФАКТА, который был запущен один раз, но теперь с новым значением... то есть я хочу обновить факт и снова выполнить условия,

дела _session.Update(command.Fact) после обновления мой факт выдает мне сообщение об ошибке: "Факт для обновления не существует", хотя я вижу ВСЕ факты, все еще находящиеся в сеансе.

Любая идея приветствуется. Спасибо.

1 ответ

Я разобрался, как это сделать, если кто-то еще столкнется с этой проблемой. Сохраняя ISession (как описано выше), используйте _session.Query<Facts>() для того, чтобы проверить, что у вас уже есть. Управляйте своим кодом, чтобы обновить объект. После этого звонка

_session.TryUpdate(Fact);
_session.Fire();

И это работает:)

Другие вопросы по тегам