1

我最初在这里发布http://hg.readify.net/neo4jclient/issue/122/createunique-withparam-object


我正在运行 neo4j 1.9.1 和 neo4jclient 1.0.0.590

继这个问题 http://hg.readify.net/neo4jclient/issue/66/support-custom-parameters-in-cypher-fluent

我正在尝试重用该语法来创建唯一的关系和具有属性的节点

var docoType = new DocumentationType() {DocumentationTypeId = message.DocumentationTypeId, Description = message.DocumentationTypeDescription};

_connectedClient.Cypher
    .Start(new {docType = docTypeCategory})
    .CreateUnique("docType-[r:{ISDOCTYPERELAT]}->(newDocType {possiblyNewDocoType})")
    .WithParam("ISDOCTYPERELAT", IsDocumentationType.TypeKey)
    .WithParam("possiblyNewDocoType", docoType)
    .Return<Node<DocumentationType>>("newDocType");

_log.Info(JsonConvert.SerializeObject(createDocType.Query));

当我询问结果时,这是提琴手的一些结果

邮政

{
"query" : "START docType=node({p0})\r\nCREATE UNIQUE (docType) - [r:{ISDOCTYPERELAT}]-> (newDocType {possiblyNewDocoType})\r\nRETURN newDocType",
"params" : {
    "p0" : 538,
    "ISDOCTYPERELAT" : "DOCTYPES",
    "possiblyNewDocoType" : {
        "DocumentationTypeId" : "USERADMINISTRATION",
        "Description" : "User Administration"
    }
}

}

回复

{
"message" : "string matching regex ``(``|[^`])*`' expected but `{' found\n\nThink we should have better error message here? Help us by sending this query to cypher@neo4j.org.\n\nThank you, the Neo4j Team.\n\n\"CREATE UNIQUE (docType) - [r:{ISDOCTYPERELAT}]-> (newDocType {possiblyNewDocoType})\r\"\n                              ^",
"exception" : "SyntaxException",
"fullname" : "org.neo4j.cypher.SyntaxException",
"stacktrace" : ["org.neo4j.cypher.internal.parser.v1_9.CypherParserImpl.parse(CypherParserImpl.scala:47)", "org.neo4j.cypher.CypherParser.parse(CypherParser.scala:44)", "org.neo4j.cypher.ExecutionEngine$$anonfun$prepare$1.apply(ExecutionEngine.scala:80)", "org.neo4j.cypher.ExecutionEngine$$anonfun$prepare$1.apply(ExecutionEngine.scala:80)", "org.neo4j.cypher.internal.LRUCache$LazyValue.value$lzycompute(LRUCache.scala:27)", "org.neo4j.cypher.internal.LRUCache$LazyValue.value(LRUCache.scala:27)", "org.neo4j.cypher.internal.LRUCache.getOrElseUpdate(LRUCache.scala:39)", "org.neo4j.cypher.ExecutionEngine.prepare(ExecutionEngine.scala:80)", "org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:72)", "org.neo4j.cypher.ExecutionEngine.execute(ExecutionEngine.scala:76)", "org.neo4j.cypher.javacompat.ExecutionEngine.execute(ExecutionEngine.java:79)", "org.neo4j.server.rest.web.CypherService.cypher(CypherService.java:94)", "java.lang.reflect.Method.invoke(Method.java:606)", "org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)"]

}

我已手动获取查询文本并删除了关键引号并使其成功运行

//THIS WORKS
START docType=node(538)
CREATE UNIQUE docType-[r:DOCTYPES]->(newDocType {
DocumentationTypeId : "USERADMINISTRATION",
Description : "User Administration"
})
RETURN newDocType

我在这里做错了吗?

谢谢!

4

1 回答 1

2

解决了我的问题!

我正在参数化这种关系,这应该是一个很大的不。

这个 c# 查询有效

var createDocType = _connectedClient.Cypher
.Start(new {docType = docTypeCategory})
.CreateUnique("(docType) - [r:"+ IsDocumentationType.TypeKey+ "]-> (newDocType {possiblyNewDocoType})")                                                
.WithParam("possiblyNewDocoType", docoType)
.Return<Node<DocumentationType>>("newDocType");

```

于 2013-08-02T12:21:29.910 回答