Как обновить 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) после обновления моего факта дает мне сообщение об ошибке: «Факт для обновления не существует», хотя я могу видеть ВСЕ факты, все еще находящиеся в сеансе.

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


person Jose    schedule 16.07.2015    source источник


Ответы (1)


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

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

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

person Jose    schedule 16.07.2015