2017-03-08 38 views
0

我實現web服務,這是簡單地增加新的記錄,我想每個用戶的記錄數限制爲10實體框架:如果傳遞(計數),並加入過多的記錄

 var linksCount = _context.Quicklinks.Count(q => q.UserId == _principalInfo.UserId); 
     if (linksCount < 10) 
     { 
      _context.Quicklinks.Add(newItem); 
      _context.SaveChanges(); 
      return newItem; 
     } 

當在很短的時間內有很多請求時,服務會傳遞if語句,即使數字實際上大於10,它也會添加新記錄。是否有機會在不鎖定此代碼片段的情況下解決此問題?

+0

緩存是否有可能發生? –

+0

@JonS否 - 考慮兩個快速請求。兩者都同時執行'var linksCount ... if(linksCount <10)',都看到9並進入'if'。然後添加'newItem',最後以11結尾。 –

+0

你需要鎖定某種類型來解決這個問題,不管它在你的c#代碼中,還是你編寫一些自定義的SQL來執行添加,它仍然會行/表鎖定。 –

回答

-1

正如@JamesThorpe所說,鎖定可能是你最好的選擇。如果你發現鎖定過於昂貴,你可以嘗試使用鏈接數來維護一個會話變量並檢查它。