当我尝试更新Neo4JClient中的现有节点而不使用在Id和Name属性上具有唯一约束的事务时,我收到此异常:
CypherExecutionException:节点6已存在,标签为User,属性为“Name”= [Mike]
但是当我尝试在事务中更新Node时,我收到了这个异常:
执行请求时收到意外的HTTP状态。
回复状态为:404 Not Found
Neo4j的回复(可能包含有用的细节!)是:{“results”:[],“errors”:[{“code”:“Neo.ClientError.Transaction.UnknownId”,“message”:“无法识别的交易ID。交易可能已超时并已回滚。“}]}
我的代码是这样的:
using (var transaction = client.BeginTransaction())
{
client.Cypher
.Merge("(user:User { Id: {id}})")
.OnCreate().Set("user = {user}")
.OnMatch().Set("user = {user}")
.WithParams(new { id = user.Id, user = user })
.ExecuteWithoutResults();
transaction.Commit();
}
我的问题是:有没有办法在使用交易时获得实际错误,就像我在不使用交易时得到一个?
由于
编辑1:
看起来NULL ID未正确处理。向下钻取后,我设法拉出实际误差。第一个例外是:
errors = {[
{
"code": "Neo.ClientError.Statement.InvalidSemantics",
"message": "Cannot merge node using null property value for Id"
}
]}
此异常的堆栈跟踪是:
在1.GetRootResultInTransaction(JObject root) in [PATH_HIIDEN]\Neo4jClient\Serialization\CypherJsonDeserializer.cs:line 316 at Neo4jClient.Serialization.CypherJsonDeserializer 1 responseTask)在[PATH_HIIDEN] \ Neo4jClient \ GraphClient.cs:第933行 在System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke() 在System.Threading.Tasks.Task.Execute()
之后有404 NOT Found错误的异常。为此,堆栈跟踪是:
在[PATH_HIIDEN] \ Neo4jClient \ Execution \ HttpResponseMessageExtensions.cs中的Neo4jClient.Execution.HttpResponseMessageExtensions.EnsureExpectedStatusCode(HttpResponseMessage响应,String commandDescription,HttpStatusCode [] expectedStatusCodes):第41行 在[PATH_HIIDEN] \ Neo4jClient \ Execution \ HttpResponseMessageExtensions.cs中的Neo4jClient.Execution.HttpResponseMessageExtensions.EnsureExpectedStatusCode(HttpResponseMessage响应,HttpStatusCode [] expectedStatusCodes):第14行 在Neo4jClient.Execution.ResponseBuilder。<> c__DisplayClass21_0.b__0(任务
1.<PrepareCypherRequest>b__0(Task
2.InnerInvoke() 在System.Threading.Tasks.Task.Execute()
可以在下一个版本中修复此错误吗?
编辑2
1 requestTask) in [PATH_HIIDEN]\Neo4jClient\Execution\ResponseBuilder.cs:line 127
at System.Threading.Tasks.ContinuationResultTaskFromResultTask
含义流畅的Api导致错误。
答案 0 :(得分:0)
所以问题是在Neo4j
2.2.6中引入了一个更改,其中任何ClientError
(约束违规等)导致服务器上的事务自动回滚。
Neo4jClient
已经在出错时自动回滚,并继续这样做。使用2.2.6导致404错误,因为交易不再存在(以前的版本没问题)。
因此,我已经修复并发布了更新的Nuget包,因此1.1.0.12
的版本Neo4jClient
现在会给您正确的回复。