0

这是一个两部分的问题

  1. 当我尝试创建新节点时出现此错误

    无法将类型“Neo4jClient.NodeReference”隐式转换为“Neo4jClient.GraphClient”

我这里有 3 个类第一个连接到 GraphDB 服务器并返回客户端变量以供以后在其他类中使用

public GraphClient GetConnection()
        {
            var client = new GraphClient(new Uri("http://localhost:7474/db/data"));
            client.Connect();
            return client;
        }

然后是 New_Node 类,看起来像这样

 class New_Node
    {
        public GraphClient Node { get; set; }
    }

然后是具有 CreateNode 方法的 Graph Operations 类

public GraphClient CreateNode()
{
    Graph_Connection connection = new Graph_Connection();
    var NewNode = connection.GetConnection();
    var Created_Node = NewNode.Create(new New_Node());
    return Created_Node;
}
  1. 如何在另一行代码上设置节点的属性而不是使用节点创建它们,我想让我的应用程序更加动态,因为这种方式似乎很难编码

    var refA = client.Create(new Person() { Name = "Person A" });

在Java中可以做到这一点

Node user1 = this.graphDb.createNode(); 
user1.setProperty("name", "Mike");
4

1 回答 1

5

问题是您正试图将数据库连接保留在节点本身内。

这是您对节点数据结构的定义:

class New_Node
{
    public GraphClient Node { get; set; }
}

这表示您需要一个名为“Node”的节点上的属性,该属性保存与包含该节点的数据库的连接。舌头扭曲了吗?我的是。

根据您的 Java 比较,我认为您希望您的节点实际上看起来像这样:

class New_Node
{
    public string Name { get; set; }
}

这表示您想要一个具有 Name 属性的节点,该属性是一个字符串。

然后,您可以像这样创建它:

graphClient.Create(new New_Node { Name = "Mike" });

关于您的子问题,“1.如何在另一行代码上设置节点的属性,而不是使用节点创建它们”,当您调用时,graphClient.Create我们将其持久化到数据库中。任何以后的属性更改都是对数据库的更新,以及更多的调用。

只需在您的节点准备好持久化时调用 create。

var node = new New_Node();
... think ...
node.Name = "Mike";
... think ...
graphClient.Create(node);

基本上,每次你打电话graphClient.Something我们都会打数据库。这是因为我们正在研究无状态 API。这与与内存中的数据库通信的 Java 驱动程序不同(假设您正在谈论嵌入式 Neo4j 实例)。

HTH。

——泰坦

于 2013-03-21T00:53:43.033 回答