在MVC . net上并发访问数据

本文关键字:访问 数据 并发 MVC net | 更新日期: 2023-09-27 18:19:19

我有一个MVC网站,从数据库中访问进程列表,并选择一个"随机"进程,以便用户可以分析。他可以批准或不批准该流程,并自动接收另一个。

问题是几个用户将同时执行该进程,我需要阻止那些已经在审查中的进程。

我不能在数据库端这样做,所以必须是一个应用程序解决方案,并且对用户完全不可见…

我怎样才能解决这个问题?

——编辑

一个场景将是:用户获得一个进程(该进程被锁定),然后他"忘记"打开或"关闭"浏览器。所以我需要解锁这个进程

Some ideas I had:

  • 使用MSMQ(当用户"忘记"完成任务时,是否可能将进程放回去?)

  • 在我的webapp上使用静态ConcurrentBag来保持查看id列表。

谢谢

在MVC . net上并发访问数据

如果数据库表不是一个选项,您可以创建一个内存缓存,在那里您可以存储正在审查的Id。每次有人开始审查时,检查内存缓存以查看要审查的Id是否存在。如果不存在,将新id添加到内存缓存中。(您可以在内存缓存中存储id列表)。

你可以使用MemoryCache类来实现这一点。

记住,这是在内存中。所以你的应用程序池重置可以清除内存。此外,当将来有多个服务器时,这可能无法工作(跨服务器共享缓存会遇到麻烦!)。在这种情况下,您需要一个集中的位置来保存这些信息。我的建议是在你的sql server中使用db表

为什么不用System.Web.HttpContext.Current.Application呢?

您可以创建一个自定义类来保存进程的id并管理访问。