2

我们的团队已经在我们的 aspnet 核心应用程序中实现了事务中间件。在请求开始时,我们开始一个事务,然后委托给下一个中间件。如果发生任何未处理的异常,我们将回滚事务 - 否则我们提交。不幸的是,这似乎不适用于热巧克力。它似乎在内部处理异常。有什么我们可以检查的(在 aspnet 核心上下文中)以确定是否有任何未处理的异常?

4

1 回答 1

4

在 V11 中,这种方法存在一些问题。v11 中的解析器是并行执行的。因此,如果您想共享数据库上下文或其范围,您将遇到并发问题。

您可以在此处阅读有关 ef 和 HotChocolate 的更多信息: https ://chillicream.com/docs/hotchocolate/integrations/entity-framework/

在 GraphQL 中,你真的只需要突变中的事务范围。突变只允许作为顶级字段

mutation {
   updateUserName(input: {id:1233, name:"foo"}) {
      errors {
         message
      }
      user {
          username
      }
   }
}

像这样的东西是无效的

mutation {
   updateUser(id:1233) {
      name(value: "foo") {
         value 
      }
   }
}

由于只有顶级字段可能有副作用,您可以在那里创建您的事务范围。如果您不想重复自己,您甚至可以为它定义一个中间件:

https://github.com/ChilliCream/graphql-workshop/blob/master/docs/5-understanding-middleware.md

于 2021-01-17T18:19:14.377 回答