Neo4jClient创建和更新关系

本文关键字:关系 更新 创建 Neo4jClient | 更新日期: 2023-09-27 18:25:48

我有一个Neo4j图形数据库,可以通过Neo4jClient访问。(它是Neo4j REST api的.NET客户端)

这是一个文档的开头。

我做了什么

与数据库的连接正常。

Client = new GraphClient(new Uri("http://localhost:7474/db/data"));
Client.Connect();

通过这种方式,我可以插入节点。。。

Client.Create(new myNodeClass { name = "Nobody" });

并查询它们。

Node<myNodeClass> Node = Client.Get<WordNode>(138);
return Node.Data.name;

我想做什么

我只是想添加和更新节点之间的关系。(关系类型必须是数字。)

不幸的是,目前还没有关于关系的文档。

有一个名为CreateRelationship的命令。但我做不到。

Client.CreateRelationship(Neo4jClient.NodeReference<TSourceNode>, TRelationship);

你能给我一个添加和更新(数字)关系的例子吗?

Neo4jClient创建和更新关系

在测试用例中可以找到很多。。。例如:

http://hg.readify.net/neo4jclient/src/4693da483a90/Test/ApiUsageIdeas.cs

我也被卡住了,然后我意识到我需要在CreateRelationship方法中指定源节点引用参数的类型参数。

在本例中,我创建了关系。我还没有更新关系。

Disclosure(它在我的机器上作为控制台应用程序运行visual studio 2012,YMMV)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using Neo4jClient;
namespace Neo4jClientExample
{
    class MyConsoleProgram
    {
        private GraphClient Client {get;set; }
        static void Main(string[] args)
        {
        try{
            GraphClient client = new GraphClient(new Uri("http://localhost:7474/db/data"));
            client.Connect();
            Us us = new Us { Name = "We are Us" };
            NodeReference<Us> usRef = client.Create(us);
            Console.WriteLine("us node.id: {0}", usRef.Id);
            var queryUs = client.Cypher.Start("n", "node(" + usRef.Id + ")").Return<Node<Us>>("n");
            Console.WriteLine("Us node name: {0}'n", queryUs.Results.AsEnumerable<Node<Us>>().First().Data);

            AllYourBase allYourBase = new AllYourBase { Name = "We are all your base" };
            NodeReference<AllYourBase> allYourBaseRef = client.Create(allYourBase);
            Console.WriteLine("AllYourBase node.id: {0}",allYourBaseRef.Id);
            var queryAllYourBase = client.Cypher.Start("n", "node(" + allYourBaseRef.Id + ")").Return<Node<AllYourBase>>("n");
            Console.WriteLine("AllYourBase node name: {0}'n", queryAllYourBase.Results.AsEnumerable<Node<AllYourBase>>().First().Data);
            RelationshipReference areBelongToRef = client.CreateRelationship(allYourBaseRef, new AreBelongTo(usRef));
            var query = client.Cypher.Start("allyourbase", "node(" + allYourBaseRef.Id + ")").Match("allyourbase-[:ARE_BELONG_TO]->us").Return<Node<AllYourBase>>("allyourbase");
            query.ExecuteWithoutResults();
            Console.WriteLine("Result of querying for all your base that belongs to us: {0}", query.Results.AsEnumerable<Node<AllYourBase>>().First().Data.Name);
        }
        catch(Exception ex)
        {
            Console.WriteLine("{0}", ex.Message);
            Console.WriteLine("{0}", ex.InnerException);
        }
        Console.ReadKey();
    }
}
public class Us
{
    public string Name {get; set;}
    public Us()
    {
    }
}
public class AllYourBase
{
    public string Name { get; set; }
    public AllYourBase()
    {
    }
}
public class AreBelongTo : Relationship, IRelationshipAllowingSourceNode<AllYourBase>,
                                         IRelationshipAllowingTargetNode<Us>
{
    public AreBelongTo(NodeReference targetNode)
        : base(targetNode)
    {}
    public const string TypeKey = "ARE_BELONG_TO";
    public override string RelationshipTypeKey
    {
        get { return TypeKey; }
    }
}

您可以查看测试,http://hg.readify.net/neo4jclient/src/4693da483a90/Test/RelationshipTests.cs或者联系Neo4j邮件列表groups.google.com/group/Neo4j上的作者?