C#entityframework + MySql 中如何正确处理并发以避免重复?

问题描述 投票:0回答:1

我有一个 aspnet6.0 应用程序,当并发请求在毫秒内发出时,它会创建重复记录。逻辑很简单。需要创建一个组,但它的名称是从数据库中验证的,以查看它是否已存在。如果它确实存在,则返回它,否则创建并返回新组。正在使用 MySQL,名称列也已建立索引。我正在考虑添加 Task.Delay 但这听起来不太有希望。我正在寻找一个高性能且高效的解决方案。也尝试过缓存,但问题仍然存在。

enter image description here

请求时间表:

enter image description here

mysql entity-framework asp.net-core entity-framework-core abp
1个回答
0
投票

对组名称定义唯一约束。

然后如果插入尝试保存存在的组名,则会抛出重复键异常。

如果您首先按名称检查该组是否存在,这种情况应该很少见。换句话说,只有当您检查组时没有找到任何组名,但在检查后,其他某个会话插入了该组名时,您才会得到重复项。

通过从数据库中重新读取该组来处理异常,因为它现在已经存在。

© www.soinside.com 2019 - 2024. All rights reserved.