1

我有一个 Neo4jClient 的 Friend 关系类,我想用它来管理我的社交网站上的朋友。我没有为每个可能的朋友状态(请求、接受、拒绝、阻止)创建单独的关系,而是在我的朋友关系类中添加了一个属性。但是,当使用 Neo4jClient 序列化该类时,它不会在关系上创建Status属性。

这是我的关系类:

/// <summary>
/// Friendship relationship - User is a friend of a User with a Status of REQUESTED, ACCEPTED, DENIED, BLOCKED
/// </summary>
public class Friend : Relationship, IRelationshipAllowingSourceNode<User>,
    IRelationshipAllowingTargetNode<User>
{
    public static readonly string TypeKey = "FRIEND";

    public string Status { get; set; }

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

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

这是我创建关系的代码:

client.CreateRelationship(user, Friend(requestedUser) { Status = "REQUESTED" });

我希望以后能够查询所有 Friend 关系并根据 Status 属性返回不同的集合。我还希望能够更新好友关系的 Status 属性。请告知应该如何正确添加 Status 属性。

4

1 回答 1

3

经过进一步研究,我发现您需要为继承的通用关系类提供一个有效负载类,如下所示:

/// <summary>
/// Friendship relationship - User is a friend of a User with a Status of REQUESTED, ACCEPTED, DENIED, BLOCKED
/// </summary>
public class Friend : Relationship<FriendPayload>, IRelationshipAllowingSourceNode<User>,
    IRelationshipAllowingTargetNode<User>
{
    public static readonly string TypeKey = "FRIEND";

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

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

这是有效负载类:

public class FriendPayload
{
    public string Status { get; set; }
}

这应该允许您将属性添加到您的关系中。从那里,您可以使用 Cypher 根据关系中的属性获取特定的关系/节点。您还可以使用 Cypher 来更新关系属性,如下所示:

START n=node(1) MATCH n-[r:FRIEND]-e WHERE e.Name = "Bob" SET r.Status = "ACCEPTED";

注意:您还可以对起始节点使用基于索引的查找。

我将尝试在我的博客上为 Neo4jClient 编写一个基本的入门教程,将我的所有发现汇总到一个地方,因为我已经弄清楚了基础知识。

于 2013-01-02T05:57:19.877 回答