Neo4jClient node ids
本文关键字:ids node Neo4jClient | 更新日期: 2023-09-27 18:20:01
我很难弄清楚ID在Neo4jClient中的工作方式。我希望我的.NET模型有一个标识符属性,理想情况下,我希望它只使用该节点的Neo4j自动递增id。
然而,无论我在模型类中使用什么情况(id
、ID
、Id
),它总是将其添加为Neo4j中的另一个字段(在创建新节点时将其保持为0)。因此,当我在Neo4j浏览器中查看该节点时,它有一个自动递增的<id>
,还有一个始终为0的id
字段(除非我在C#中的模型中手动设置它)。
我希望能够创建一个新的.NET模型类(它最初将具有未初始化的id 0),然后一旦我使用Neo4j fluent Cypher查询创建了它,它将具有来自新创建节点的自动递增id的id。
此处的示例:https://github.com/Readify/Neo4jClient/wiki/cypher-examples
显示其具有如下ID的User
类:
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,显然在它创建之前我不知道。
Alessandro是正确的,您不应该使用节点ID,当然不应该将其用作内部表示的映射。如果你要删除一个节点,然后创建另一个,它很可能有相同的ID。
现在,有时需要来获取ID(同样不是用作内部标识符),但可能是在Path结果或其他内容中,Neo4jClient
确实允许您获取它。
小心,龙就这样躺着
Neo4jClient
是关于POCO的,它可以帮助你将它们翻译成Neo4j和Neo4j,WIKI的例子只是,例如,ID可以来自任何数量的来源,也可以是任何类型,例如,我经常使用GUID
s作为我的ID。同样,我过去也使用过类似SnowMaker的东西来生成ID。如果你想要节点ID,你需要用Node<T>
类型包装你的POCO,所以:
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位。
使用Neo4j中的id是错误的做法,因为它可能会随着时间的推移而更改或分配到不同的节点。看看这个插件:
https://github.com/graphaware/neo4j-uuid
干杯,