c# – 防止在编辑时重复编辑/锁定DB记录 – 单个后端服务器

前端之家收集整理的这篇文章主要介绍了c# – 防止在编辑时重复编辑/锁定DB记录 – 单个后端服务器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_301_1@情况:共享单个后端服务器(WCF RIA或其他Web服务)的多个前端(例如Silverlight,ASP).

我正在寻找一个标准,以防止多人编辑同一个表格.我知道这不是一个容易的主题,但要求是要求.

以前我使用DB上次修改日期来对提交的数据进行处理,如果数据在加载后被修改,则会发出警告或错误.初始系统只是在没有任何警告的情况下覆盖数据.问题是我有一个新的要求来防止这两种情况.会有很多UI,因此锁定系统可能是一个挑战,并且显然无法保证客户端不会在编辑过程中关闭窗口/浏览器.

我将不胜感激任何帮助.

解决方法

如果我是对的,那么你所说的似乎是一种退房/编辑/登记方式的工作流程.您希望当一个用户正在编辑记录时,其他用户甚至无法开始编辑同一记录.

这是一种悲观的并发形式.许多Web和数据访问框架都支持(相关的)乐观并发 – 也就是说,当您尝试保存时,他们会告诉您其他人已经更改了记录.乐观没有锁定的概念,确实 – 它确保在您获取的时间和保存时间之间没有其他用户保存.

您想要的并不是Web上的简单要求,因为当用户中止编辑时(例如,通过关闭浏览器),服务器实际上无法强制执行签入.我不知道有任何框架可以解决这个问题.

基本上你需要的是在服务器上保存结账信息.编辑时的用户进程需要请求结帐,服务器将根据他们检出的内容授予/拒绝这个.服务器还必须保存资源被检出的信息.当用户保存服务器时,释放锁定并在请求时允许新的结账.当用户中止编辑时出现问题 – 如果是通过UI,没问题……只需告诉服务器释放锁定即可.

但如果是通过关闭浏览器,关闭机器等,那么你就有了一个孤儿锁.大多数人解决这两种方式之一:
1.暂停锁将最终被释放.这里的好处是它相当容易和可靠.缺点是记录被锁定了一段时间,而不是真正的编辑.而且,你必须让你的超时足够长,如果用户花了很长时间保存它们就不会出现错误,因为锁定超时(并且它们必须重新开始).
2.心跳.用户定期ping回服务器说“是的,仍在编辑”.这基本上是来自#1的超时选项,但是具有可以根据需要刷新的非常短的超时.好处是你可以任意缩短.缺点是复杂性和网络使用率增加.

如果您已经拥有一个事务处理持久存储(如数据库),那么签入/签出令牌实际上并不难实现:困难的部分是将其集成到您的用户体验中.

猜你在找的C#相关文章