如何在c#中使用Neo4jClient添加两个节点之间的关系
本文关键字:两个 节点 关系 之间 添加 Neo4jClient | 更新日期: 2023-09-27 18:11:55
public void AddRelationshipTest()
{
var conn = Neo4JConn.Connect();
Team obj = new Team();
int id1 = 1, id2 = 2;
NodeReference<Team> sTm = (NodeReference<Team>)ds.GetNodeReference<Team>(id1, conn, obj);
NodeReference<Team> dTm = (NodeReference<Team>)ds.GetNodeReference<Team>(id2, conn, obj);
ReportsToData data = new ReportsToData();
data.SinceYear = 2008;
reportsTo relation = new reportsTo(dTm, data);
conn.CreateRelationship(sTm, relation);
}
其中Get nodereference是一个返回节点引用的方法,并且工作良好。Team是具有数据成员作为节点的类当我使用createrrelationship时,它创建了一个关系我主要担心的是,即使源节点和目标节点之间已经存在关系,它也会创建关系。我想在两个节点之间创建一个唯一的关系,就像
graphClient.Cypher
.Match("(user1:User)", "(user2:User)")
.Where((User user1) => user1.Id == 123)
.AndWhere((User user2) => user2.Id == 456)
.CreateUnique("user1-[:FRIENDS_WITH]->user2")
.ExecuteWithoutResults();
但是这里的FRIENDS_WITH(任何关系)我必须硬编码,所以我不想使用它。
如何使用Neo4jClient?
我真的不确定问题是什么,与.CreateUnique
为什么不只是使用string.Format
或字符串插值不硬编码的关系?
public void CreateRelationship(IGraphClient graphClient, string relationshipName)
{
graphClient.Cypher
.Match("(user1:User)", "(user2:User)")
.Where((User user1) => user1.Id == 123)
.AndWhere((User user2) => user2.Id == 456)
.CreateUnique($"(user1)-[:{relationshipName}]->(user2)") //<-- here
.ExecuteWithoutResults();
}
显然可以是:
.CreateUnique(string.Format("(user1)-[:{0}]->(user2)", relationshipName))
或者如果你真的想使用+
:
.CreateUnique("(user1)-[:" + relationshipName + "]->(user2)")
您应该绝对使用Cypher技术,而不使用NodeReference<T>