我有以下场景: 我有2个web api函数,它们将数据删除/插入到SQL Server数据库中。数据Access通过.net entityframework v6处理。插入/删除方法仅从本地运行的c#程序调用。我正在使用HttpClient类来调用web api方法。 Web方法的工作原理如下,当我调用insert时,所有现有记录都将被删除,新的记录将被插入,因此没有真正的更新过程。
以下是我的两个功能:
[HttpDelete()]
public async Task<int> DeleteStartlist(int eventid, int run, int heat, string category)
{
_data.dbsStartlistEntries.RemoveRange(_data.dbsStartlistEntries.Where(s => s.Event.Id == eventid && s.RoundOrder == run && s.HeatOrder == heat && s.Category == category));
return await _data.SaveChangesAsync();
}
[HttpPost()]
public async Task<int> UpdateStartlists(int eventid, List<StartlistEntry> en)
{
try
{
if (en.Count == 0)
return 0;
var xdel = await DeleteStartlist(eventid, en[0].RoundOrder, en[0].HeatOrder, en[0].Category);
var ev = await _data.dbsEvents.FindAsync(eventid);
if (ev != null)
{
en.ForEach(e => e.Event = ev);
_data.dbsStartlistEntries.AddRange(en);
}
return await _data.SaveChangesAsync();
}
catch (System.Exception ex)
{
return 1;
}
}
但现在我遇到了以下问题。例如,当我连续10次调用Update方法而没有在函数调用之间等待时,我收到以下异常:
存储更新,插入或删除语句会影响意外的行数(0)。自实体加载后,实体可能已被修改或删除。刷新ObjectStateManager条目。
对我来说,这听起来像是并发问题,但我真的不知道如何解决它。 所以这是我的问题,有没有办法让api调用等待每个其他服务器端,或者它们是否始终运行并发或有没有办法锁定数据库?