我可以创建一个关系并且我有它的RelationshipReference。但是我如何获得与有效载荷和所有其他关系的其余部分?
使用节点我可以只使用 client.Get(nodeid) 但 AFAIK 没有类似的关系。
格雷姆林是要走的路吗?如果是这样 - 有人可以给我一个提示,因为我仍然对如何通过 Neo4jClient 进行试验和恐惧。
我可以创建一个关系并且我有它的RelationshipReference。但是我如何获得与有效载荷和所有其他关系的其余部分?
使用节点我可以只使用 client.Get(nodeid) 但 AFAIK 没有类似的关系。
格雷姆林是要走的路吗?如果是这样 - 有人可以给我一个提示,因为我仍然对如何通过 Neo4jClient 进行试验和恐惧。
您可以为 IGraphClient 本身使用扩展方法:
public static class GraphClientExtensions
{
public static RelationshipInstance<T> GetRelationship<T>(this IGraphClient graphClient, RelationshipReference relationshipReference) where T : Relationship, new()
{
if(graphClient == null)
throw new ArgumentNullException("graphClient");
if(relationshipReference == null)
throw new ArgumentNullException("relationshipReference");
var rels = graphClient.ExecuteGetAllRelationshipsGremlin<T>(string.Format("g.e({0}).outV.outE", relationshipReference.Id), null);
return rels.SingleOrDefault(r => r.Reference == relationshipReference);
}
}
用法:(IsFriendOf 是一个Relationship 派生类,Data 只是一个POCO)
var d1 = new Data{Name = "A"};
var d2 = new Data{Name = "B"};
var d1Ref = graphClient.Create(d1);
var d2Ref = graphClient.Create(d2);
var rel = new IsFriendOf(d2Ref) { Direction = RelationshipDirection.Outgoing };
var relRef = graphClient.CreateRelationship(d1Ref, rel);
//USAGE HERE
var relBack = graphClient.GetRelationship<IsFriendOf>(relRef);
这并不理想,但它确实使您的代码更易于阅读。(另外你不需要知道节点,只需要关系参考)
作为这个的一个变体,我得到了这个工作:
// Get every relation going out from the node we used as out-node
// when we created the relation.
var query = string.Format("g.v({0}).outE", fromNodeID);
var rels = _client.ExecuteGetAllRelationshipsGremlin<MyPayload>(
query, null
);
// We can get too many so filter per ID.
var rel = rels.Single(r => r.Reference.Id == relID);
但这不是我想要的工作方式。我有一个ID,最快的就是使用它,不是吗?
我努力了
var rels = _client.ExecuteGetAllRelationshipsGremlin<MyPayload>(
"g.e(42)", null
);
但所发生的只是我得到了异常:
{"Cannot access child value on Newtonsoft.Json.Linq.JProperty."}
开始序列化的有效负载中没有任何内容。(错误?)另外:删除 <MyPayload> 没有帮助。所以我不认为这是一个反序列化问题;但是查询“ge(42)”的结果与作为工作解决方法提到的“gv(11).outE”不同。
(Neo4j 版本是 1.9.M04,我的 Neo4jClient 应该只有一周半的时间。)