1

使用 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();
    }

这会触发规则并正确执行所有操作。我现在想要发生的是添加能够更新曾经触发过的 SAME FACT 的能力,但现在有了一个新的值......意思是,我想更新这个事实,并让它再次通过条件.

更新我的事实后执行_session.Update(command.Fact)操作会给我一条错误消息:“更新的事实不存在”,即使我可以看到所有事实仍在会话中。

欢迎任何想法。谢谢你。

4

1 回答 1

1

如果其他人遇到这个问题,我想出了如何去做。保留 ISession(以上述方式),用于_session.Query<Facts>()检查您已有的内容。操作您的代码以对此对象进行更新。在那次通话之后

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

它有效:)

于 2015-07-16T22:20:35.660 回答