Как обновить 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();
И это работает:)