2017-03-27 2 views
1

다양한 상황에서 동일한 작업을 수행하면 Node Out of Date Exception이됩니다. 다음은이 예외를 발생시킨 두 개의 인스턴스가 있습니다 SenseNet에서 "Node Out of Date"예외를 어떻게 해결합니까?

  1. Order.Save()가 호출 될 때 다른 콘텐츠 생성되는 특정 컨텐츠 항목 (주문), (송장)에 필드를 업데이트합니다. 내가 할 때 한 번에 하나의 항목을 업데이트하면 모든 것이 잘 작동합니다. 그러나 목록을 반복 할 때 NodeIsOutOfDateException이 표시됩니다. 루프에 지연을 넣으면 Sleep(1000) - 아무런 효과가 없습니다.
  2. 나는 각 하위 항목이 생성 된 부모와 아이 모두 후 을 저장 아래 Content 새로운 한 다음 만들기 하위 항목을 만들 수 있습니다. 이 프로세스가 완료되면 부모를 이동하여 NodeIsOutOfDateException을 얻으려고합니다.

은 무엇이 예외가 발생하고 그것을 피할 수있는 가장 좋은 방법은 무엇입니까? SenseNet에서

답변

3

노드는 소스 코드에 대한 운영 노드 객체가 원하는만큼 놀아 수 있지만, 컨텐츠 저장소의 유한 한 수명을 가지고있다. 글로벌 Node 변수를 만들거나로드하지 않고 시간에 관계없이 저장소 노드에서 저장소 작업을 수행 할 수는 없습니다. 새로운 노드가로드하거나 작성하여 중, 존재에 와서 원칙적으로

, 그것은 필드에 모든 업데이트를 할 순차적으로 가능한 빨리 업데이트 된 노드를 저장하는 것이 가장 좋습니다.

예외 "노드는 유효 기간이"해결하려면 단지 예외가 발생 작업 직전에 노드를 다시로드합니다. 로드를 용이하게하기 위해 정수 변수 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.