当您需要一个用户同时编辑数据库的一个实体(任何表)时,您会使用什么方法?
以前,当有人打开一个条目并关闭它时,我通过 bool 变量巧妙地实现了锁定。它有效,但是当启动服务器时,我必须将所有这些字段重置为零,我认为这是不好的做法。现在我可能会通过 Redis 来实现这一点,但我也不完全理解这一点。
CAS(比较和交换)- 存储实体的版本,然后在客户端想要更新它时检查它。我喜欢这个想法,但我不喜欢这样的事实:在保存时,用户可能会发现他的版本已过时并且无法保存数据。在这里,他要么必须重新加载所有输入的数据,要么在选项卡中的旁边显示新数据。总的来说,在我看来,从 UI/UX 的角度来看,让它变得方便是相当困难的,特别是当他在表单上输入十几个字段时。
我在脑海中想象的一个例子:
- 用户 A 已打开帖子并正在编辑。时间是否有限,我不知道,但就15分钟吧。
- 用户 B 尝试打开同一条记录,并被通知用户 A 当前正在编辑该记录,并且只能以读取模式打开。
- 如果对编辑有限制,而且我认为有必要,那么这一次之后用户A就失去了在数据库中保存的能力,需要重新加载编辑页面。可能会不方便,但目前就这样)
PS 标签是有条件的,但堆栈是 C# WPF/Avalonia。
