Neo4j 未设置特定参数时的ParameterNotFoundException
我正在尝试使用Neo4jClient运行Cypher语法:Neo4j 未设置特定参数时的ParameterNotFoundException,neo4j,neo4jclient,Neo4j,Neo4jclient,我正在尝试使用Neo4jClient运行Cypher语法: UNWIND {apples} AS newApple CREATE (a:Apple {newApple}) 使用对象的C#列表列出对象可能位于的a: class Apple : Fruit { [JsonProperty(PropertyName = "Variety")] public String Variety { get; set; } } 我不想在代码的不同地方分散对象变量规格 但是跑步
UNWIND {apples} AS newApple
CREATE (a:Apple {newApple})
使用对象的C#列表列出对象可能位于的a
:
class Apple : Fruit
{
[JsonProperty(PropertyName = "Variety")]
public String Variety { get; set; }
}
我不想在代码的不同地方分散对象变量规格
但是跑步
graphClient.Cypher
.Unwind(a, "newApple")
.Create("(a: Apple {newApple})")
.ExecuteWithoutResults()
抛出:
Neo4jClient.NeoException:'ParameterNotFoundException:应为名为newApple的参数'
将Create
行更改为
.Create("(a: Apple {Id: newApple.Id})")
但似乎有效,因此找到了预期参数newApple
。这里的问题是,如果我更改类的属性,我必须更改cypher查询字符串中的直接依赖项
问题
Unwind
中指定的标识符因为
newApple
不再是一个参数,而是一个变量,而您使用的语法只能应用于外部参数
对于变量,可以这样使用:
WITH [{id: 1, name: 'appe1'}, {id: 2, name: 'apple2'}] as apples
UNWIND apples as newApple
CREATE (a:Apple) SET a = newApple
RETURN a
基于Gabor的回答,对于C#neo4jclient,可以这样实现(在评论和编辑中展开):
SET
允许使用JsonAttribute属性设置整个对象,而无需在cypher中指定显式参数。那么如何使用c#neo4jclient中的任意POCO实现这一点呢?类似这样:…Create((a:Apple)”).SET(“a=newApple”)…
但是您仍然在这里的查询中指定vars/params,名称:“appe1”
。我的目标是加入一个具有JsonProperties的对象。修正这项修正案。
graphClient.Cypher
.Unwind(apples, "newApple")
.Create("(a: Apple)")
.Set("a = newApple")
.ExecuteWithoutResults();