首页 > 解决方案 > 在 Datastax CassandraCSharpDriver.Graph 中向现有顶点添加新顶点和边,但出现边 OUT 错误

问题描述

我正在向 Datastax Graph 中的现有顶点添加一个新顶点和一条边,我想看看如何使用 Datastax CassandraCSharpDriver.Graph 来做到这一点。

工作的 Gremlin 代码如下所示:

Vertex link1 = graph.addVertex(label, "link").property("id", "link-2")
Vertex item1 = g.V().has("item", "id", "item-1").next()
item1.addEdge('contains', link1)

但是在 C# 驱动程序语法中,我希望做这样的事情,但是当我执行它时,错误是“'out'方向上的'contains'的邻接尚未添加到'link'”

GraphTraversalSource g = DseGraph.Traversal(mySession);
var traversal = g.AddV("link").Property("id", "link-1")
                .AddE("contains")
                .V("item").Has("id", Eq("item-1"));
GraphResultSet result = mySession.ExecuteGraph(traversal);

我创建了这样的边缘和边缘连接:

schema.edgeLabel("contains").multiple().create()  
schema.edgeLabel("contains")  
.connection("item", "link")  
.connection("link", "item")  
.add()  

如果架构边缘设置不正确或如何在 Datastax CassandraCSharpDriver.Graph 中以最佳方式执行此操作,有什么想法吗?

标签: c#graph-databasesgremlindatastax-enterprise-graph

解决方案


你的小精灵在这里:

g.AddV("link").Property("id", "link-1")
            .AddE("contains")
            .V("item").Has("id", Eq("item-1")

没有正确形成。它应该是:

g.AddV("link").Property("id", "link-1").As('l1').
  V("item").Has("id", Eq("item-1")).
  AddE('contains').To('l1')

AddE()您需要指定和来识别边连接的顶点From()To()如果不指定这些,AddE()将只使用传入Vertex的两个值来创建自引用边缘。因此,在这种情况下,您应该只需要根据To()推断From()指定 。

请注意参考文档中的示例,您应该在其中看到其他方法来执行此操作。


推荐阅读