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);

“结果”返回与 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 }
        }
    });

这将在一次调用中创建第二个节点和关系。

于 2013-06-16T22:25:18.073 回答