我可以創建一個關係,我有它的RelationshipReference。但是,我如何獲得有效載荷和所有關係的其餘部分?如何使用Neo4jClient通過其ID來獲取Neo4j關係?
與節點我可以只client.Get(nodeid)但AFAIK沒有什麼類似的關係。
Gremlin要走了嗎?如果是這樣 - 有人可以給我一個提示,因爲我仍然在試用和恐嚇如何通過Neo4jClient做到這一點。
我可以創建一個關係,我有它的RelationshipReference。但是,我如何獲得有效載荷和所有關係的其餘部分?如何使用Neo4jClient通過其ID來獲取Neo4j關係?
與節點我可以只client.Get(nodeid)但AFAIK沒有什麼類似的關係。
Gremlin要走了嗎?如果是這樣 - 有人可以給我一個提示,因爲我仍然在試用和恐嚇如何通過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是一個關係派生類,數據只是一個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);
它的效果並不理想,但它確實使你的代碼有點更容易閱讀。 (加上你不需要知道節點,只是關係參考)
由於this一個變種我得到這個工作:
// 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."}
沒有在連載開始與有效載荷什麼。 (bug?)另外:刪除<MyPayload>沒有幫助。所以我不認爲這是一個反序列化問題;但查詢「g.e(42)」的結果與作爲工作解決方法提到的「g.v(11).outE」不同。
(Neo4j的版本是1.9.M04和我Neo4jClient應該只是一週半的歷史。)
我認爲*問題在於'ExecuteGetAllRelationshipsGremlin'方法正在尋找一個關係集合,而不僅僅是一個,因此反序列化器試圖獲得一個集合,但是你只能帶回一個關係。 – 2013-02-27 12:06:02
如果答案請看到 http://stackoverflow.com/questions/12491221/how-do-i-retrieve -a-relationship-in-neo4j-graph-database 可以幫助你。 – 2013-02-26 11:47:58
@ChrisSkardon完美 - 但現在我得到{「無法訪問Newtonsoft.Json.Linq.JProperty上的子值」。}而是。將它們手動添加到關係並從ExecuteGetAllRelationshipsGremlin中刪除也無濟於事。 –
LosManos
2013-02-26 12:41:53