【发布时间】:2020-09-15 15:00:12
【问题描述】:
我们的团队已经在我们的 aspnet 核心应用中实现了事务中间件。在请求开始时,我们开始一个事务,然后委托给下一个中间件。如果发生任何未处理的异常,我们将回滚事务 - 否则我们提交。不幸的是,这似乎不适用于热巧克力。它似乎在内部处理异常。我们可以检查什么(在 aspnet 核心上下文中)以确定是否有任何未处理的异常?
【问题讨论】:
标签: hotchocolate
我们的团队已经在我们的 aspnet 核心应用中实现了事务中间件。在请求开始时,我们开始一个事务,然后委托给下一个中间件。如果发生任何未处理的异常,我们将回滚事务 - 否则我们提交。不幸的是,这似乎不适用于热巧克力。它似乎在内部处理异常。我们可以检查什么(在 aspnet 核心上下文中)以确定是否有任何未处理的异常?
【问题讨论】:
标签: hotchocolate
在 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
【讨论】: