1

ソーシャル ネットワーキング Web サイトで友達を管理するために使用したい 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 プロパティに基づいてさまざまなセットを返すことができるようにしたいと考えています。また、Friend 関係の Status プロパティを更新できるようにしたいと考えています。Status プロパティを適切に追加するにはどうすればよいかアドバイスしてください。

4

1 に答える 1

3

さらに調査した結果、次のように、継承されたジェネリック Relationship クラスにペイロード クラスを提供する必要があることがわかりました。

/// <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";

注: 開始ノードにインデックス ベースのルックアップを使用することもできます。

基本を理解したので、すべての調査結果を 1 か所にまとめて、Neo4jClient の基本的な入門チュートリアルをブログに書いてみます。

于 2013-01-02T05:57:19.877 に答える