0

我有一个长表是一个GroupCode长列。我可以有多组产品,因此为了获得一个组的所有产品,我只需要获得与GroupCode相同的所有产品。是否有可能以乐观并发确保这种情况?

我可以将产品从一个组更改为另一个组,如果我从一个组更改产品,我希望组的所有产品更改为新组。

如果我用乐观并发,它会发生这样的:

一个用户想从一组改变产品,所以他得到所有的产品相同groupCode。将新的groupCode设置为所有这些产品。

第二位用户将新产品添加到组中。但是第一个用户没有这个产品,因为他在第二个用户添加新产品之前得到了所有的产品。

所以最后,一个新产品有一个错误的GroupCode,因为代码不正确,因为该组的所有产品都改变为新组。所以我会有一个只有一个产品的团队,这是不正确的。

由于悲观并发性,第一次使用得到该组的所有产品,阻止所有产品。

第二个用户尝试向该组添加新产品,为此,首先尝试将该组的其中一个产品作为参考产品,但第一个用户如何阻止该产品,第二个用户有等待。

第一位用户将所有产品更改为新组并取消阻止所有产品。

第二个用户获得具有新groupCode的参考产品,因此新产品被添加到正确的组中。总之,我希望当我将产品从一个组更改为另一个组时,我想要更改组的所有产品,并避免新产品属于旧组。

是否有可能通过乐观并发来解决这种情况?或者我必须使用悲观并发?

+0

看来你想对​​组执行操作,而不是对组的产品执行操作。 –

+0

但我没有组表,我有产品具有相同的代码。所以我想更新Products.GroupCode列,所以我想在procuts中执行一个操作:更新产品GroupCode = 111其中GroupCode = 000; –

+0

请显示一些示例数据。你描述它的方式(*一个长列是一个GroupCode的表格 - 为什么“长”?)没有明确涉及哪些表格以及它们是如何相关的。目前还不清楚是否可以启动新组,以及何时启动新组。如果用户总是更新*现有*组中的所有产品,则乐观并发将正常工作。 –

回答

0

老实说,我在这里看不到问题。如果您想将其作为OCC实施,则只需按照OCC phases

  1. 用户A获得属于组ABC
  2. 用户B得到一个参考Record1,属于ABC此刻
  3. 用户所有记录A移动Record1到组XYZ
  4. 用户B希望向Record1所属的组添加新记录。因此,只要插入记录之前,拿到小组第一的Record,这是现在XYZ

这是假设你用“引用记录”的方法去。如果您的屏幕(或其他)只列出了当前可用的组,并且其中一个组变为空(因为您已将所有记录移至另一个组),但无法确定这是并发问题还是其工作原理预期。在这种情况下,应该对数据库进行规范化处理,并将类别拆分到单独的表中,以便至少用户获得该组不再存在的错误。

+0

但是在这种情况下,用户B以参考ABC获得Record1,用户B以record1为参考,该产品仍然以ABC为参考。用户A更改为XYZ并保存更改,用户B将新产品组设置为ABC,因为用户B将其作为参考时记录1具有的组。被证实的结果是新产品有XYZ代码。 –

+0

不是。这个想法就是在插入新记录之前,刷新(从db再次获取)参考产品的CURRENT类别。 –

+0

您可能需要这样的东西 - https://msdn.microsoft.com/en-us/library/jj592904(v=vs.113).aspx(请参阅'自定义乐观并发异常解决方案') –

相关问题