1

いくつかのノードとリレーションシップを使用して Neo4j インスタンスをシードする C# クライアントを作成しようとしています。リレーションシップ プロパティを作成しようとすると、問題が発生します。

flag プロパティとの関係を作成するコードは次のとおりです。

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; }
    }
}

データ ブラウザ タブでデータを見ると、リレーションシップに関するプロパティはありません。関係インデックスも作成しましたか?

私たちは何を見逃していますか/間違っていますか?

4

2 に答える 2

2

(コンテキスト: 私は Neo4jClient プロジェクトを率いています。)

ショーンの答えは正しいですが、時代遅れです。

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 回作成することがなくなります。手続き型のアプローチでは、それははるかに困難です。
  2. Neo4jClient の非 Cypher ラッパーは少し古くて扱いにくいため、今後大きな投資は見られません。
  3. C# のアプローチではWithParam、すべてが適切にエンコードされていることを確認するために使用され、Nice オブジェクトを引き続き渡すことができます。
  4. C# のアプローチではWithParam、クエリ プランのキャッシュを許可するために使用されます
于 2013-09-11T01:47:47.173 に答える