2016-10-07 16 views
0
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 NodeRefernce - метод, возвращающий ссылку узла и работающий нормально. Команда - это класс, имеющий члены данных по узлам Когда я использую CreateRelationship, он создает связь . Моя главная проблема заключается в том, что она создает отношения, даже если между исходным и целевым узлом существует связь. Я хочу, чтобы создать уникальные отношения между двумя узлами так же, какКак добавить связь между двумя узлами с помощью Neo4jClient с C#

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?

+1

Когда вам запрещено задавать новые вопросы, ** не переписывайте старые вопросы вместо них. Прочитайте [консультативный] (http://meta.stackoverflow.com/q/255583/476) и следуйте за ним. – deceze

ответ

0

Я не совсем уверен, в чем проблема: с .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>