2013-09-10 3 views
1

Мы пытаемся написать клиент C#, который семя экземпляра Neo4j с некоторыми узлами и отношениями. При попытке создания свойств отношений мы сталкиваемся с проблемами.Neo4jClient не добавляет свойств к отношениям

Вот код, чтобы создать relatioship со свойством флага:

var s = clientConnection.CreateRelationship(root, new RelationshipPrincipleToContent("SECURITY", rootFolder) { flags = "+W" }); 

Вот класс отношения:

public class RelationshipPrincipleToContent : Relationship, IRelationshipAllowingSourceNode<Principles>, IRelationshipAllowingTargetNode<Content>{ 
    public string flags { get; set; } 
    string RelationshipName; 

    public RelationshipPrincipleToContent(NodeReference targetNode) : base(targetNode){} 

    public RelationshipPrincipleToContent(string RelationshipName, NodeReference targetNode): base(targetNode){ 
     this.RelationshipName = RelationshipName; 
    } 

    public override string RelationshipTypeKey{ 
     get { return RelationshipName; } 
    } 
} 

Когда мы смотрим на данные во вкладке браузера данных есть нет свойств в отношениях. Мы также создали индекс отношений?

Что мы упускаем/делаем неправильно?

ответ

2

Сначала добавьте класс (PayLoad.cs в этом экземпляре), который содержит набор для общедоступной строки.

public class PayLoad 
    { 
     public string Comment { get; set; } 
    } 

Обновите свой класс отношений, чтобы использовать эту полезную нагрузку класс:

public class RelationshipPrincipleToContent : Relationship<PayLoad>, IRelationshipAllowingSourceNode<Principles>, IRelationshipAllowingTargetNode<Content> 
    { 
     string RelationshipName; 

     public RelationshipPrincipleToContent(string RelationshipName, NodeReference targetNode, PayLoad pl) 
      : base(targetNode, pl) 
     { 
      this.RelationshipName = RelationshipName; 
     } 

     public override string RelationshipTypeKey 
     { 
      get { return RelationshipName; } 
     } 
    } 
} 

Теперь просто обновить вызов метода на классе отношений:

clientConnection.CreateRelationship(AllPrincipals, new RelationshipPrincipleToContent("SECURITY", rootFolder, new PayLoad() { Comment = "+R" })); 
2

(Контекст: я веду проект Neo4jClient .)

Ответ Shaun правильный, однако датирован.

Направление как Neo4j, так и Neo4jClient относится к Cypher как единый подход ко всему, что вам нужно делать.

Этот Cypher запрос:

START root=node(0), rootFolder=node(123) 
CREATE root-[:SECURITY { flags: 'W+' }]->rootFolder 

Является ли это в C#:

client.Cypher 
    .Start(new { root = client.RootNode, rootFolder }) 
    .Create("root-[:SECURITY {security}]->rootFolder") 
    .WithParam("security", new { flags = "+W" }) 
    .ExecuteWithoutResults(); 

Некоторые примечания:

  1. Использование Cypher для этого типа материала может выглядеть немного сложнее начните с, но он будет расти лучше для вас. Например, простой переключатель от Create до CreateUnique гарантирует, что вы не создадите одну и ту же связь дважды; это будет намного сложнее с процедурным подходом.
  2. Non-Cypher упаковщики в Neo4jClient немного старые и неуклюжие, и не увидят какие-либо значительные инвестиций двигаться вперед
  3. # подход C использует WithParam, чтобы убедиться, что все получает закодированные правильно, и вы можете пройти в хороших объектах
  4. C# подход использует WithParam разрешить кэширование плана запроса
+0

шахта была основана на старых постах, которые помогли мне понять это. Спасибо за обновленную информацию. –

Смежные вопросы