[英]Neo4jClient create relationship with attribute and update it later
我有一个Neo4jClient的朋友关系类,我想用它来管理社交网站上的朋友。 我没有为每个可能的朋友状态(请求,接受,拒绝,阻止)创建单独的关系,而是向我的朋友关系类添加了一个属性。 但是,当使用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" });
我希望以后能够查询所有朋友关系并根据Status属性返回不同的集合。 我还希望能够在Friend关系上更新Status属性。 请告知如何正确添加Status属性。
经过进一步的研究,我发现你需要为继承的通用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";
注意:您还可以对起始节点使用基于索引的查找。
我将尝试在我的博客上为Neo4jClient编写一个基本的入门教程,将我的所有发现汇编到一个地方,因为我已经找到了基础知识。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.