Neo4jClient 节点 ID

Neo4jClient node ids

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

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

我希望能够创建一个新的 .NET 模型 class(它最初的未初始化 ID 为 0),然后一旦我使用 Neo4j Fluent Cypher 查询创建它,它将从新创建的节点的自动递增 ID 中获取 ID。

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

显示他们 User class 拥有这样的 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,显然在它创建之前我不知道它。

使用 Neo4j 中的 id 是一种错误的做法,因为它可能会随时间变化或分配给不同的节点。 看看这个插件:

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

干杯,

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

现在,有时您需要 获取 ID,(同样 不是 用作内部标识符)- 但是也许在路径结果或其他东西中,Neo4jClient 确实允许你得到它。

注意,龙是这样撒谎的。

Neo4jClient 都是关于 POCO 的,它可以帮助您将它们与 Neo4j 相互转换,来自 WIKI 的示例就是这样,例如,ID 可能来自任何数量的来源,或者是任何类型,例如,我经常使用 GUIDs 作为我的 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 / POCO 位。