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

これによりルールが実行され、すべてが適切に実行されます。私が今実現したいのは、一度発火した同じ事実を更新できる機能を追加することですが、今は新しい値で...つまり、事実を更新して、条件を再度実行したいということです.

ファクト_session.Update(command.Fact)を更新した後に実行すると、「更新するファクトが存在しません」というエラー メッセージが表示されますが、セッション中のすべてのファクトがまだ表示されます。

どんなアイデアでも大歓迎です。ありがとうございました。

4

1 に答える 1

1

他の誰かがこの問題に遭遇した場合の対処方法を見つけました。(上記の方法で) ISession を保持し、_session.Query<Facts>()既に持っているものを検査するために使用します。コードを操作して、このオブジェクトを更新してください。その電話の後

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

そしてそれは動作します:)

于 2015-07-16T22:20:35.660 に答える