2010-03-09 7 views
0

UpdateModel (theModelToUpdate)을 사용하여 동시성 문제를 일으키는 데 문제가 있습니다.행을 업데이트하지 못하게하는 UpdateModel()

기본적으로 일어나는 일은 데이터베이스에 행에 필요한 정보가 전부는 아니지만 대부분 포함되어 있다는 것입니다. 필요한 나머지 정보는 NULL입니다. 사용자는 목록 상자를 사용하여이 행에 정보를 추가하고 새 행을 만듭니다 (목록 상자의 모든 항목에 대해 ajax 명령이 전송되므로 컨트롤러를 호출하는 데 사용되는 루프 때문에 컨트롤러가 매우 빨리 호출됩니다). 항목).

내 컨트롤러에서 먼저 사용자가 업데이트 할 열이 NULL인지 확인합니다. 그렇다면 UpdateModel을 사용하여 행을 업데이트합니다. 그것들이 null가 아니면 (행이 완료되었음을 의미 함) 나머지 목록 상자 항목들로 새로운 행을 생성합니다.

디버깅 할 때 컨트롤러가 너무 빨리 호출되므로 UpdateModel은 내가 계획했던 것처럼 바로 호출되지 않는다는 것을 알았습니다. 이 때문에 목록 상자의 여러 항목이 건너 뛰고 행을 업데이트 할 수 없다는 오류가 표시됩니다.

어떻게 해결할 수 있습니까?

답변

0

UpdateModel을 사용하여 행을 업데이트하지 않아서 문제가 해결되었습니다. 대신 행을 삽입 한 다음 돌아가서 누락 된 정보가있는 행을 삭제하십시오. 아마도 최선의 해결책은 아니지만 문제가 해결되었습니다.

1

잘 모르겠습니다. 컨트롤러가 AJAX를 사용하여 호출되는시기는 언제입니까? 이 문제는 매우 빠르게 발생하므로 사용자가 실제로 행을 추가 할 때가 아니라 제출할 때 컨트롤러를 여러 번 호출한다고 가정합니다. "매우 빠름"에서는 초당 여러 작업을 이해합니다.

글쎄, 한 번만 행에 항목을 추가하는 경우 UpdateModel을 사용하면 안됩니다. 수동으로이 작업을 수행 할 수 있습니다.

둘째, 빠른 항목에서 동일한 항목에 대한 컨트롤러를 호출하면 어딘가에서 잠금을 획득해야하기 때문에 데이터베이스에서 동시성 문제가 발생할 수 있습니다. 그러나 이것은 데이터베이스 추상화, 데이터베이스 유형 및 사용하는 잠금 메커니즘에 달려 있다고 생각합니다.

대화 형으로 하나의 항목 만 추가하는 작은 컨트롤러 작업을 작성하는 것이 좋습니다. 즉 사용자가 실제로 뭔가 할 때마다 작업을하는 것이 좋습니다. 이렇게하면 동시성 문제가 발생하지 않게됩니다.

관련 문제