当前位置: 首页 > 知识库问答 >
问题:

Neo4jClient节点ID

纪佐
2023-03-14

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

但是,无论我在模型类中使用何种情况(ididid),它总是将其作为另一个字段添加到Neo4j中(在创建新节点时将其保持为0)。因此,当我在Neo4j浏览器中查看该节点时,它有一个

我希望能够创建一个新的。NET模型类(它最初的未初始化id为0),然后使用Neo4j fluent Cypher查询创建它后,它的id将来自新创建的节点的自动递增id。

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

显示他们的用户具有如下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个答案

隆谦
2023-03-14

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

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

干杯,

邓欣可
2023-03-14

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

现在,有时您需要获取ID(同样不是用作内部标识符),但可能是在路径结果或其他内容中,并且Neo4jClient确实允许您获取ID。

请注意,龙是这样撒谎的。

Neo4jClient是关于POCO的,它可以帮助您将它们翻译成Neo4j,来自WIKI的示例就是,例如,ID可以来自任意数量的源,或者是任意类型,例如,我经常使用GUIDs作为我的ID。同样,我过去也使用过类似SnowMaker的东西来生成ID。如果需要节点ID,则需要将POCO包装在节点中

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

获取一个IENumable

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

获取一个IENumable

 类似资料:
  • 我需要一个非常简单的例子,说明如何使用Neo4JClient将节点添加到索引中 在下面的C代码中,我创建了一个索引和一个员工节点。 问题: 在下面的代码中,如何将创建的节点添加到索引中?解决方案应允许搜索员工ID或姓名。

  • 我想使用Neo4jClient创建一些Person和Books类型的节点。 要做到这一点,我有这样的班级人员: 为了创建节点,我写了这样的东西: (客户- 当我在Neo4j web界面中看到创建的节点时,没有为创建的节点分配标签。我以为那个人就是标签。如何使用Neo4jClient为创建的节点分配标签。我想要像“Match(n:Person)”这样的查询,但是因为没有创建类型,所以不可能这样做。

  • 我将一些数据存储为neo4j节点。此节点具有一些关联的C#类未描述的属性,因此在neo4jclient查询返回时不会自动映射回该类。 例如,这个C类: 存储在neo4j中,然后使用以下neo4jclient fluent代码检索: 将用名称和编号填充Node对象,但保留对CustomClass对象的空引用。 为了解决这个问题,我将CustomClass序列化为JSON字符串,并将其作为字符串属性存

  • 我需要使用变异密码更新给定节点的所有属性。我想远离节点和节点引用,因为我知道它们已经过时了,所以不能使用IGraphClient。更新。我对变异密码非常陌生。我用C#编写,使用Neo4jClient作为Neo4j的接口。 我编写了以下代码来更新“resunit”的“Name”属性,其中属性“UniqueId”等于2。这个很好用。但是, *我的resunit对象有许多属性 *我不知道哪些属性已更改

  • 我正在开发一个应用程序,让用户能够构建自己的图形。我一直在为所有查询和创建使用参数。但当我想让用户能够创建一个节点时,他们也可以根据自己的需要给它添加标签(遵守neo4j对空字符串标签的限制)。如何参数化这种类型的事务? 我试过这个: 但这会导致neo的语法错误。我很想连接,但担心这可能会给我的应用程序带来注入风险。 我很想建立我自己的类,读取预期的字符串并拒绝任何类型的neo语法,但这会限制我的

  • 当我尝试在不使用事务的情况下更新Neo4JClient中的现有节点时,它对id和Name属性具有唯一约束,我收到以下异常: 节点6已经存在的标签用户和属性"Name"=[Mike] 但当我尝试更新事务中的节点时,会收到以下异常: 执行请求时收到意外的HTTP状态。 响应状态为:404未找到 Neo4j的响应(可能包括有用的细节!)was:{“结果”:[],“错误”:[{“代码”:“Neo.Clie