Neo4jClient节点ID

时间:2015-11-01 13:13:24

标签: c# neo4j neo4jclient

我无法弄清楚ID在Neo4jClient中的工作方式。我希望我的.NET模型具有标识符属性,理想情况下我只想使用该节点的Neo4j自动增量id。

但是,无论我在我的模型类中使用什么情况(idIDId),它总是将其添加为Neo4j中的另一个字段(当它保持为0时我创建了一个新节点)。因此,当我在Neo4j浏览器中查看该节点时,它具有自动递增的<id>,以及始终为0的id字段(除非我在C#中的模型中手动设置它)

我希望能够创建一个新的.NET模型类(最初的未初始化ID为0),然后一旦我使用Neo4j流畅的Cypher查询创建它,它将具有来自新创建的节点的自动增量ID。

这里的例子: https://github.com/Readify/Neo4jClient/wiki/cypher-examples

显示他们的User类有这样的ID:

public long Id { get; set; }

但是在创建新用户的示例中......

var newUser = new User { Id = 456, Name = "Jim" };
graphClient.Cypher
    .Create("(user:User {newUser})")
    .WithParam("newUser", newUser)
    .ExecuteWithoutResults();

我不确定这个456幻数在这个例子中来自何处,但我只是希望这是Neo4j id,我显然不知道它直到它为止创建

2 个答案:

答案 0 :(得分:4)

Alessandro是正确的,你不应该使用节点ID肯定不会作为内部表示的映射。如果您要删除节点,然后创建另一个节点,它可能具有相同的ID。

现在,有时候需要来获取ID,(再次用作内部标识符) - 但可能在路径结果或其他内容中,并且Neo4jClient确实允许你获得它。

请注意,这就是龙的谎言。

Neo4jClient是关于POCO的,它可以帮助你将它们转换为Neo4j和来自Neo4j,WIKI的例子只是一个例子,ID可能来自任意数量的来源,或者是任何类型例如,我经常使用GUID来获取我的ID。同样,我过去曾使用像SnowMaker之类的东西来生成ID。如果您需要节点ID,则需要将POCO包装在Node<T>类型中,以便:

client.Cypher.Match("(n:User)").Return(n => n.As<User>()).Results;

获得IEnumerable<User>响应,而:

client.Cypher.Match("(n:User)").Return(n => n.As<Node<User>>()).Results;

为您提供IEnumerable<Node<User>>响应,其中Node<T>的每个实例都有一个属性 - Reference,即Neo4j ID,另一个 - Data,即T 1}} / POCO位。

答案 1 :(得分:3)

使用来自Neo4j的id是一种错误的做法,因为它可能会随着时间的推移而改变或被分配到不同的节点。 看看这个插件:

https://github.com/graphaware/neo4j-uuid

干杯,