如何在运行时使用静态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.Query<Facts>()
来检查您已经拥有的内容。操作代码对该对象进行更新。在调用
_session.TryUpdate(Fact);
_session.Fire();
它工作了:)