我如何检索的Neo4j图形数据库中的关系(How do i retrieve a relations

2019-09-22 14:21发布

请原谅我是新来的:我目前使用.net neo4jClient。 目前,我有一个共享节点和客户端节点。 我创建它们之间的关系CustomerOwnsShare和坚持它。

这里是我的关系类

public class CustomerOwnsShare :
    Relationship,
    IRelationshipAllowingSourceNode<Customer>,
    IRelationshipAllowingTargetNode<Share>
{
    public CustomerOwnsShare(NodeReference targetNode)
        : base(targetNode)
    {

    }

    public int Quantity { get; set; }
    public float CostPerShare { get; set; }
    public string DateOfPurchase { get; set; }
    public string ShareSymbol { get; set; }

    public const string TypeKey = "CUSTOMER_OWNS_SHARE";
    public override string RelationshipTypeKey
    {
        get { return TypeKey; }
    }
}

我们检索关系的列表,从我使用LINQ如下数据库恢复

IEnumerable<RelationshipInstance> relationshipInstances =
            graphClient.RootNode.In<Customer>(CustomerBelongsTo.TypeKey, c => c.Email == email)
            .OutE(CustomerOwnsShare.TypeKey)

但是,这将返回我RelationshipInstance对象,它没有我需要(数量,CostPerShare等)的数据。

RelationshipInstance暴露了RelationshipReference对象,但即使这并不能帮助我找回我的实际关系的对象。 在挖得更深一些,我知道我可以如下执行原始的小鬼查询

graphClient.ExecuteGetAllRelationshipsGremlin<>()

但该函数签名也返回我RelationshipInstance的IEnumerable。

如何我可以检索我的实际任何意见或建议,持久关系的对象与它的数据?

提前致谢

Answer 1:

很抱歉的时间让这个给你,你真正想要的是一个“ RelationshipInstance<CustomerOwnsShare> ” ...

所以,让我们假装我有以下设置:

Root(0) -[]-> User(1) -[CUSTOMER_OWNS_SHARE]-> MSFT(2)

括号中的数字是Neo4j的参考资料。 我将执行使用neo4jclient查询是:

var results = graphClient.ExecuteGetAllRelationshipsGremlin<CustomerOwnsShare>("g.v(2).inE", null);
var quant = results[0].Data.Quantity; //etc

现在,如果你只是复制/粘贴此,你会得到一个错误:

'CustomerOwnsShare' must be a non-abstract type with a public parameterless constructor in order to use it as parameter 'TData' in the generic type or method 'Neo4jClient.GraphClient.ExecuteGetAllRelationshipsGremlin<TData>(string, System.Collections.Generic.IDictionary<string,object>)'

这是一种痛苦,解决这个问题的办法是把一个参数的构造函数到您的CustomerOwnsShare类:

[EditorBrowsable(EditorBrowsableState.Never)]
public CustomerOwnsShare() : base(0) { }

这是对你罚款,因为TargetNode将由解串器进行设置。 要确保你没有自己虽然使用该构造。 该“EditorBrowsable”将防止外部组件从看到它,但不幸的是,在同一个组件中的任何代码都不会做,所以你可能想将其标记为:

[Obsolete]

还有,只是作为对自己的提醒。



文章来源: How do i retrieve a relationship in Neo4j graph database