首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4jClient事务错误

Neo4jClient事务错误
EN

Stack Overflow用户
提问于 2015-10-31 02:22:00
回答 1查看 1.7K关注 0票数 1

当我尝试不使用对Id和Name属性具有唯一约束的事务更新Neo4JClient中的现有节点时,我会收到以下异常:

CypherExecutionException:节点6已经存在标签用户和属性"Name"=Mike

但是,当我试图更新事务中的节点时,我会收到以下异常:

在执行请求时收到意外的HTTP状态。 响应状态为: 404未找到 来自Neo4j的响应(可能包括有用的细节!)was:{“结果”:[],"errors":{"code":"Neo.ClientError.Transaction.UnknownId",“message”:“无法识别的事务id。事务可能已超时并回滚”}}

我的守则如下:

代码语言:javascript
复制
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没有被正确地处理。钻下来后,我设法拉出了实际的错误。第一个例外是:

代码语言:javascript
复制
errors = {[
  {
    "code": "Neo.ClientError.Statement.InvalidSemantics",
    "message": "Cannot merge node using null property value for Id"
  }
]}

此异常的堆栈跟踪如下:

( Neo4jClient.Serialization.CypherJsonDeserializer1.GetRootResultInTransaction(JObject root) in [PATH_HIIDEN]\Neo4jClient\Serialization\CypherJsonDeserializer.cs:line 316 at Neo4jClient.Serialization.CypherJsonDeserializer1.CheckForErrorsInTransactionResponse(String content) ( PATH_HIIDEN\Neo4jClient\Serialization\CypherJsonDeserializer.cs:line 291 at Neo4jClient.GraphClient.<>c__DisplayClass84_1.<PrepareCypherRequest>b__0(Task1 responseTask) ( PATH_HIIDEN\Neo4jClient\GraphClient.cs:line 933 at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke() at System.Threading.Tasks.Task.Execute()

在此之后,会出现404未找到错误的异常。为此,堆栈跟踪是:

在Neo4jClient.Execution.HttpResponseMessageExtensions.EnsureExpectedStatusCode(HttpResponseMessage响应时,PATH_HIIDEN\Neo4jClient\Execution\HttpResponseMessageExtensions.cs:line 41中的String commandDescription,HttpStatusCode[] expectedStatusCodes(在Neo4jClient.Execution.HttpResponseMessageExtensions.EnsureExpectedStatusCode(HttpResponseMessage response,HttpStatusCode[] expectedStatusCodes)在PATH_HIIDEN\Neo4jClient\Execution\HttpResponseMessageExtensions.cs:line 14 at System.Threading.Tasks.Task.Execute()

请在下一个版本中修复此错误吗?

编辑2

代码语言:javascript
复制
using (var transaction = client.BeginTransaction())
{
    manifest.Users = client.Cypher
        .Merge("(n:User { Id: '8be0b8fd-c433-44d3-a7e2-3f0d1a03fefa'}) " +
            "ON CREATE " +
            "SET n = { " +
                "Id: '8be0b8fd-c433-44d3-a7e2-3f0d1a03fefa', " +
                "UserName: 'test.user', " +
                "Name: 'Test User', " +
                "Active: true " +
            "} " +
            "ON MATCH " +
            "SET n = { " +
                "Id: '8be0b8fd-c433-44d3-a7e2-3f0d1a03fefa', " +
                "UserName: 'test.user', " +
                "Name: 'Test User', " +
                "Active: true " + 
            "}")
        .Return(n => n.As<User>())
        .Results
        .ToList();
    transaction.Commit();
}

意思是流利的Api导致了错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-03 12:19:42

因此,问题是在Neo4j 2.2.6中引入了一个更改,任何ClientError (约束冲突等)都会导致服务器上事务的自动回滚。

Neo4jClient已经对错误进行了自动回滚,并继续这样做。使用2.2.6时,这会导致404错误,因为事务不再存在(以前的版本很好)。

因此,我已经做了一个修复,并发布了一个更新的Nuget包,所以1.1.0.12版本的Neo4jClient现在将给您正确的响应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33447424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档