c# - .NET Core EF 多线程

我正在从客户端调用 .NET Core API 端点并行 (10x),我尝试检查数据库中是否存在对象,如果不存在则创建它。我的问题是查询代码将被执行 10 次,它会创建 10 次相同的记录:

查询 1 查询 2 ... 查询 10 插入 1 插入 2 ... 插入 10

我的问题是防止此类事件的最佳做法是什么?

我尝试将 DI DBContext 从 Scoped 更改为 Transient,但没有成功。我是否必须创建某种信号量或锁定机制?

提前致谢

回答1

你的问题似乎有点像在现实生活中的应用程序中,你所描述的场景不会发生。您可能需要创建一个 Task 并使用其他(如果存在),但肯定不会有 10 个相同项目的并行插入到 table。

正如 Shak Sam 指出的,您可以使用带有 .IsUnique() 的索引来确保某个对象可能只存在一次。或者,如果这应该是 table 中的静态对象,例如链表的根项,那么您总是可以尝试为该对象硬编码 Key

相似文章

最新文章