private static Node<PO.Workers> AddWorkersRootNode(GraphClient client, Node<PO.Root> rootNode)
        {
            var nodeRef = client.Create(PO.Workers.Create("Workers"), null,
                new[]{
                    new IndexEntry{
                        Name=NameIndexName,
                        KeyValues=new[]{
                            new KeyValuePair<string,object>("Name", "Workers")
                        }
                    }
                });

            client.CreateRelationship<PO.Root, Relationships.RelatedToRelationship>(rootNode.Reference, new Relationships.RelatedToRelationship(nodeRef));

            var ret = client.Get<PO.Workers>(nodeRef.Id);

            client.Update<PO.Workers>(ret.Reference, node => { node.SetID(ret.Reference.Id); });

            ret = client.Get<PO.Workers>(nodeRef.Id);

            Debug.Assert(ret.Reference.Id == ret.Data.ID);
            Debug.Assert(ret.Reference.Id == nodeRef.Id);
            Debug.Assert(ret.Reference.Id == GetWorkersRootNode(client, rootNode).Reference.Id);

            return ret;
        }
        private static Node<PO.Root> AddRootNode( GraphClient client)
        {
            var nodeRef = client.Create(PO.Root.Create(), null,
                new[]{
                    new IndexEntry{
                        Name=NameIndexName,
                        KeyValues=new[]{
                            new KeyValuePair<string,object>("Name", "Root")
                        }
                    }
                });

            var ret = client.Get<PO.Root>(nodeRef.Id);

            client.Update<PO.Root>(ret.Reference, node => { node.SetID(ret.Reference.Id); });

            ret = client.Get<PO.Root>(nodeRef.Id);

            return ret;
        }
        private static Node<PO.Worker> AddWorker(string name, GraphClient Client, Node<PO.Workers>WorkersRootNode)
        {
            var workerNodeRef = Client.Create(
                PO.Worker.Create(name),
                null,
                new[]
                {
                    new IndexEntry
                    {
                        Name = "my_index",
                        KeyValues = new[]
                        {
                            /* new KeyValuePair<string, object>("key", "value"), new KeyValuePair<string, object>("key2", ""), */ new KeyValuePair<string, object>("key3", "value3")
                        }
                    }
                }
            );

            Client.Update<PO.Worker>(workerNodeRef, node => { node.SetID(workerNodeRef.Id); });

            var workersRootNode = WorkersRootNode;

            var rel = Client.CreateRelationship<PO.Workers, Relationships.HasItemRelationship>(
                workersRootNode.Reference,
                new Relationships.HasItemRelationship(workerNodeRef)
                );

            var workerNode = Get(workerNodeRef.Id, Client);

            return workerNode;
        }
        internal static Node<PO.Chunk> Update(DTO.Chunk chunk, GraphClient client)
        {
            Debug.Assert(chunk.ID >= 1);

            var chunkNode = client.Get<PO.Chunk>(chunk.ID);

            client.Update<PO.Chunk>( chunkNode.Reference, node =>
                node.Set(chunk.Start, chunk.Stop, chunk.Duration)
            );

            return Get( chunk.ID, client );
        }
        private static Node<PO.Worker> UpdateWorker(DTO.Worker worker, GraphClient client)
        {
            var workerNode = client.Get<PO.Worker>(worker.ID);
            //workerNode.Data.Set(worker.Name);
            client.Update<PO.Worker>(workerNode.Reference, node =>
            {
                node.ID = worker.ID;
                node.Name = worker.Name;
            });

            return Get(worker.ID, client);
        }