如何在运行时使用静态session规则时更新Fact

本文关键字:规则 session 更新 Fact 静态 运行时 | 更新日期: 2023-09-27 18:03:00

使用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)给了我一个错误消息:"更新的事实不存在",即使我可以看到所有的事实仍然在会话中。

欢迎任何想法。谢谢你。

如何在运行时使用静态session规则时更新Fact

我知道如果其他人遇到这个问题该怎么做了。保留会话(以上面描述的方式),使用_session.Query<Facts>()来检查您已经拥有的内容。操作代码对该对象进行更新。在调用

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

它工作了:)