【发布时间】:2018-08-05 00:48:19
【问题描述】:
我有一个 asp.net 应用程序,它允许用户登录并保存不同时间段的约会。它是一个多用户应用程序,多个用户可以同时登录并进行预约。
我有一个存储过程,它将预约插槽数据插入数据库,在选择插槽后单击保存按钮时调用该数据库。
当 2 个或更多用户尝试同时在同一个位置保存约会时,我遇到了问题。在这种情况下,我希望只允许一次插入,并向所有其他插入存储过程的调用返回一条错误消息。
重现步骤:
- 用户 1 选择 1 个插槽。用户 2 选择与用户 1 相同的插槽。
- User1 和 User2 - 填充槽的数据
- 用户 1 和 2 同时单击保存按钮。
这应该保存用户 1 的数据,并在预约空档时向用户 2 显示错误。
简而言之,我希望只允许执行一次存储过程并向所有其他插入返回错误。
【问题讨论】:
-
什么不起作用? SQL Server 默认使用乐观并发。所以你应该得到一个并发异常。
-
我会让存储过程或您的代码在创建记录之前检查时间段是否仍然可用
-
如果可能的话,可能是对 Slot 数据类型的唯一约束?
标签: c# asp.net sql-server session ado.net