현재 ASP.NET MVC 응용 프로그램에서 낙관적 동시성에 문제가 있습니다.AJAX 호출로 낙관적 동시성 디버깅
기본적으로이 컨트롤러는 한 번 호출 될 때 제대로 작동합니다. 그러나 동시에 6 개 그룹의 주민을 수정하는 페이지가 있습니다. 문제가 발생한 곳입니다. 기본적으로 각 목록마다 한 번에 하나씩 주민 목록을 게시하므로 동시에 서버에 충돌하는 6 개의 동시 아약스 호출이 있습니다. (이것은 내가 바꿀 필요가 있을지 모르지만 확실하지 않다!)
자바 스크립트 아약스 호출은 상주 ID 목록과 함께 그룹의 ID를 게시한다. 거주자는 그룹 참조에 추가됩니다. 상태를 새로 고치려고했지만 6 개 그룹 중 하나만 업데이트 된 것으로 보입니다. 나는 또한 클라이언트가 이기게하려고 노력했다. 이 문제를 해결하기위한 지침과 요령이 필요합니다. 그래서 조금 단순화 시도
var group = _context.TherapyGroups.Include(r => r.Residents)
.Where(x => x.ID.ToString() == groupid).FirstOrDefault();
if(group == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
group.Residents.Clear();
foreach(var id in residents)
{
var resident = _context.Residents.Where(x => x.ID.ToString() == id).FirstOrDefault();
if(resident == null)
{
throw new HttpResponseException(HttpStatusCode.NotFound);
}
group.Residents.Add(resident);
}
bool saveFailed;
do
{
saveFailed = false;
try
{
_context.SaveChanges();
}
catch (DbUpdateException e)
{
saveFailed = true;
((IObjectContextAdapter)_context).ObjectContext.Refresh(RefreshMode.StoreWins, _context.Residents);
}
} while (saveFailed);
방금 주목 한 것은 _context.Residents입니다. 내가 상쾌한 _context.TherapyGroups로 바뀌었고 여전히 작동하지 않습니다. –
거주자 목록이 완성되면 저장하지 않고 각 거주자가 목록에 추가 된 후 저장하지 않으시겠습니까? 또한 IoC 컨테이너를 사용하여 _context를 해결하고 있습니까? –
지금 IoC를 사용하고 있지 않습니다.이 기능의 이점을 알려주는 것이 있습니까? –