gpt4 book ai didi

c# - 如何解决SenseNet中的 "Node Out Of Date"异常?

转载 作者:太空宇宙 更新时间:2023-11-03 23:01:02 25 4
gpt4 key购买 nike

在各种情况下,相同的操作将导致节点过期异常。以下是导致此异常的两个独立实例:

  1. 当我更新特定内容项(订单)的字段时,其他调用 Order.Save() 时创建内容(发票)。当我做一次更新一项,一切正常。然而,当我遍历列表,得到一个 NodeIsOutOfDateException。在循环中加入延迟 -- Sleep(1000) -- 没有任何区别。
  2. 我创建了新的 Content,然后在其下创建子项,保存创建每个子项后,父项和子项都将被创建。什么时候这个过程完成后,我尝试移动父对象并获取NodeIsOutOfDateException

导致此异常的原因是什么?避免它的最佳做法是什么?

最佳答案

SenseNet 中的节点在内容存储库中的生命周期是有限的,即使您在源代码中操作的节点对象可以随心所欲地存在。您不能在不考虑时间的情况下创建全局节点变量、加载它并对其执行存储库操作。

通常,当一个新节点出现时,无论是通过加载还是创建,最好按顺序对字段进行所有更新并尽快保存更新的节点。

要解决“节点已过期”异常,只需在导致异常的操作之前重新加载节点即可。保存 Node.Id 整数变量可能有助于加载。

   var parent = Node.LoadNode(Order.StoragePath);
Order order = new Order(parent);
// Assign a bunch of fields then save the order.
order.Save();

// Do more operations -- calculate invoices, send emails, etc.

// order Node is now out of date. You must reload it to
// perform Repository operations.
var orderNotOutOfDate = Node.LoadNode(order.Id) as Order;
var archiveFolder = GetArchiveFolder();
order.MoveTo(archiveFolder); // MoveTo fails if Node is out of date.

关于c# - 如何解决SenseNet中的 "Node Out Of Date"异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43057737/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com