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(請參閱'自定義樂觀併發異常解決方案') –

相關問題