0

Neo4jClient を使用して (C# は初めて)、Neo4j からデータを構築および取得しようとしています。まず、アイテムと検索への関係を構築します。

 NodeReference<Search> searchNode = client.Create(searches[i]);

    itmNode = client.Create(items[j], new IRelationshipAllowingParticipantNode<Item>[0],
              new[]
             {
               new IndexEntry("Item")
              {
                     {"Type", items[j].Type },
                     {"ItemDescription", items[j].ItemDescription },
                     {"ItemNumber", items[j].ItemNumber }
               }
            });
client.CreateRelationship(itmNode, new SearchedFor(searchNode, 1));

次に、Neo4j からのノードの取得をテストしています。

var results = client.Cypher.Start("n", itemDict[firstitem])
                .Match("n-[r]->()<-[r2]-other")
                .Return<Node<Item>>("other")
                .Results;

var node6 = ((IRawGraphClient)client).ExecuteGetCypherResults<Node<Item>>(new Neo4jClient.Cypher.CypherQuery("start n=node(6) return n;", null,Neo4jClient.Cypher.CypherResultMode.Set)).Select(un => un.Data);

"results" は、node(6) に関連する 2 つのノードを返します。「node6」は、ノード 6 を返すと思われる別のコードです。どちらもノードを返しますが、返されるプロパティはすべて空白です。Neo4j 監視ツールでプロパティを確認できますが、Neo4jClient を使用してプロパティが返された場合は確認できません。ノードの設定方法やデータの取得方法に何か不足していますか?

私のオブジェクトの戻り値は Data.ItemDescription="", Data.ItemNumber=0, Reference=Node 5 を示しています

.Results の後に「Select(un => un.Data)」を追加すると、このような他の例で見たように機能しませんでした

さらに情報が必要な場合はお知らせください。

Neo4jClient バージョン 1.0.0.579

Neo4j バージョン 1.8.2

アイテムクラスは次のとおりです。

 public class Item
    {
        private string _name;
        private string _desc;
        private long _id;

        public Item(string name, string desc, long id)
        {
            _name = name;
            _desc = desc;
            _id = id;
        }

        public Item()
        {
            _name = "";
            _desc = "";
            _id = 0;
        }

        public long ItemNumber
        {
            get
            {
                return _id;
            }
        }

        public string ItemDescription
        {
            get
            {
                return _desc;
            }
        }
        public string Type
        {
            get
            {
                return "Item";
            }
        }
    }
4

1 に答える 1

1

機能させる

問題は、Itemクラスにセッターが公開されていないことです。これらのプロパティを設定する方法がないため、無視します。

コードの半分を削除しても問題ありません。:)

public class Item
{
    public long ItemNumber { get; set; }
    public string ItemDescription { get; set; }
    public string Type { get ; set; }
}

より良いものにする

これを置き換えます:

NodeReference<Search> searchNode = client.Create(searches[i]);

    itmNode = client.Create(items[j], new IRelationshipAllowingParticipantNode<Item>[0],
              new[]
             {
               new IndexEntry("Item")
              {
                     {"Type", items[j].Type },
                     {"ItemDescription", items[j].ItemDescription },
                     {"ItemNumber", items[j].ItemNumber }
               }
            });
client.CreateRelationship(itmNode, new SearchedFor(searchNode, 1));

これとともに:

var searchNode = client.Create(searches[i]);

var itemNode = client.Create(
    items[j],
    new[] { new SearchedFor(searchNode, 1) }
    new[]
    {
        new IndexEntry("Item")
        {
            {"Type", items[j].Type },
            {"ItemDescription", items[j].ItemDescription },
            {"ItemNumber", items[j].ItemNumber }
        }
    });

これにより、1 回の呼び出しで 2 番目のノードと関係が作成されます。

于 2013-06-16T22:25:18.073 に答える