簡體   English   中英

實體框架並發根據現有值增加一個字段值1

[英]Entity Framework concurrent issue a field value increase 1 according to the existing value

我需要計算用戶提交Web表單的時間。 當多個用戶同時提交表單時,我遇到了一個並發問題。 一些計數器值是相同的。 怎么預防?

var db = new MyDB();

var maxCounter = db.TableA.Where(x=>x.OrgId == 1).Max(x=>x.counter);

int newCounter = 0;
if(maxCounter != null)
{
    newCounter = maxCounter +1;
}

var newRecord = new TableA(){ OrgId = 1, counter = newCounter, createdDate = DateTime.Now, createdBy = username };
db.TableA.Add(newRecord);
db.SaveChanges();

您還可以向您的實體添加行版本字段以使EF支持開放式並發: http : //www.codeproject.com/Articles/817432/Optimistic-Concurrency-in-Entity-Framework-Code-Fi

如果並發更新,則可以捕獲DbUpdateConcurrencyException,重新加載實體並再次增加計數器,如下所示: https ://msdn.microsoft.com/zh-cn/data/jj592904.aspx

您可以將所有表單提交記錄為單獨的記錄,並在必要時進行匯總。 它比線程同步容易得多,並且適用於多個IIS配置。

您需要在確實會更新表的代碼周圍使用 ,但這可能會導致性能問題。

其他選項可能是您更改了架構,因此最終您不需要將總計數保存在數據庫中,但是您可以使用Count方法(例如,聚合)進行計算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM