Neo4j 未设置特定参数时的ParameterNotFoundException

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; } } 我不想在代码的不同地方分散对象变量规格 但是跑步

我正在尝试使用Neo4jClient运行Cypher语法:

    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
    中指定的标识符
  • 有什么办法可以让我保留通用代码吗?我的目标是能够发送任何POCO对象以自动匹配neo节点类型参数

  • 因为
    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();