繁体   English   中英

Neo4jClient不会为关系添加属性

[英]Neo4jClient does not add properties to a relationship

我们一直在尝试编写一个C#客户端,它为一个Neo4j实例提供一些节点和关系。 在尝试创建关系属性时,我们正面临着问题。

以下是使用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; }
    }
}

当我们查看数据浏览器选项卡中的数据时,关系中没有属性。 我们还创建了一个关系指数?

我们缺少什么/做错了什么?

首先添加一个类(在此实例中为PayLoad.cs),该类包含公共字符串的集合。

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

更新您的关系类以使用此PayLoad类:

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

(背景:我领导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这种类型的东西可能看起来有点复杂,但它会更好地适合你。 例如,从CreateCreateUnique的简单切换将确保您不会创建两次相同的关系; 采用程序方法会更加困难。
  2. Neo4jClient中的非Cypher包装器有点陈旧和笨重,并且不会看到任何重大的投资前进
  3. C#方法使用WithParam来确保所有内容都被正确编码,您仍然可以传入漂亮的对象
  4. C#方法使用WithParam来允许查询计划缓存

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM