Neo4jClient事务错误

时间:2015-10-31 02:22:01

标签: neo4j neo4jclient

当我尝试更新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。&lt;&gt; 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导致错误。

1 个答案:

答案 0 :(得分:0)

所以问题是在Neo4j 2.2.6中引入了一个更改,其中任何ClientError(约束违规等)导致服务器上的事务自动回滚。

Neo4jClient已经在出错时自动回滚,并继续这样做。使用2.2.6导致404错误,因为交易不再存在(以前的版本没问题)。

因此,我已经修复并发布了更新的Nuget包,因此1.1.0.12的版本Neo4jClient现在会给您正确的回复。