为什么 IContext.RetractLinked 需要两个参数?

Why does IContext.RetractLinked require two parameters?

我使用以下方法添加了链接事实:

context.InsertLinked(longOrderKey, longOrder);

稍后,我想删除这个事实。在没有记录的情况下,我很容易构造密钥:

var longOrderKey = (managedAccount.AccountId, PositionType.Long, fungible.FungibleId);

那么为什么在使用以下方法删除链接事实时需要记录:

context.RetractLinked(longOrderKey, longOrder);

为什么这个方法不能只使用longOrderKey?如果我没有 'longOrder' 记录怎么办。在删除它之前我真的需要查看它吗?

链接的事实与创建它们的激活相关联。如果激活产生了不止一个关联事实,则密钥的目的是能够识别特定事实。如果您只在规则的 RHS 中插入一个链接的事实,您实际上可以将键设置为任何内容,例如“1”;如果要插入两个事实,则可以将键设置为“1”和“2”,依此类推。本质上,关键是识别激活中的链接事实。需要事实本身,以便引擎可以在工作内存中找到相应的条目。很像 ISession.Retract 需要事实对象,以便它可以在工作内存中找到它。 另一点是,在大多数情况下,您不需要撤回链接的事实,因为一旦激活被删除(即创建激活的条件变为假),它们会自动撤回。