문제

SubmitChanges()를 사용하여 변경할 때 다른 사용자가 일부 데이터를 변경했을 때 충돌이있는 행이나 변경된 필드가 표시되지 않고 ChangeConflictException 오류 메시지와 함께 Row not found or changed 예외와 함께 LINQ가 종종 종료됩니다.그 행에서.

충돌이있는 행과 발생하는 필드를 확인할 수있는 방법이 있습니까? 또한 LINQ가 문제를 무시하고 상관없이 데이터를 커밋하도록하는 방법이 있습니까?

또한 행의 모든 데이터가 변경된 경우 또는 LINQ가 변경하려는 필드의 데이터가 변경된 경우에만이 예외가 발생하는지 아는 사람이 있습니까?

도움이 되었습니까?

해결책

충돌이 발생한 위치를 확인하는 방법은 다음과 같습니다 (MSDN 예제이므로 많이 사용자 지정해야합니다). 라코 디스

문제를 무시하고 어쨌든 커밋하도록하려면 : 라코 디스

다른 팁

다음 (데이터 컨텍스트에 partial 클래스에 추가 할 수 있음)이 작동 방식을 이해하는 데 도움이 될 수 있습니다. 라코 디스

오류 메시지가 설명하는 내용과 전혀 관련이없는 상황에서이 오류가 발생했습니다.

내가 한 일은 하나의 DataContext를 통해 LINQ 개체를로드 한 다음 다른 DataContext를 통해 개체에 대해 SubmitChanges ()를 시도한 것이 똑같은 오류가 발생했습니다.

내가해야 할 일은 DataContext.Table.Attach (myOldObject)를 호출 한 다음 SubmitChanges ()를 호출하는 것이었고 매력처럼 작동했습니다.

볼만한 가치가 있습니다. 특히 충돌이 전혀 없어야한다고 생각하는 경우에는 더욱 그렇습니다.

O / R-Designer의 열 또는 유형이 SQL 데이터베이스의 열과 일치하지 않을 때 "행을 찾을 수 없거나 변경됨"오류가 가끔 나타납니다. 특히 한 열이 SQL에서는 NULL이 가능하지만O / R-Designer.

따라서 O / R-Designer의 테이블 매핑이 SQL 데이터베이스와 일치하는지 확인하십시오!

@vzczc에게 감사합니다.나는 당신이 제공 한 예제가 매우 도움이되었지만 해결 후 SubmitChanges를 다시 호출해야한다는 것을 알았습니다.수정 된 방법은 다음과 같습니다. 누군가에게 도움이되기를 바랍니다. 라코 디스

행을 찾을 수 없거나 변경된 것은 대부분 동시성 문제입니다.

다른 사용자가 동일한 레코드를 변경하는 경우 해당 레코드가 이미 다른 사용자에 의해 변경 되었기 때문에 이러한 오류가 표시됩니다.따라서 이러한 오류를 제거하려면 애플리케이션에서 동시성을 처리해야합니다.동시성을 잘 처리하면 더 이상 이러한 오류가 발생하지 않습니다.위의 코드 샘플은 동시성 오류를 처리하는 방법입니다.누락 된 점은 동시성 오류의 경우 해당 메서드에 refresh 변수를 넣어야한다는 것입니다. 그러면 refreshtrue 인 경우 업데이트 후 데이터를 화면에서 새로 고쳐야하므로 다른 사용자가 만든 업데이트도 볼 수 있습니다.

라코 디스

"또한 LINQ가 문제를 무시하고 상관없이 데이터를 커밋하도록하는 방법이 있습니까?"

엔티티의 '업데이트 확인'속성을 '안함'으로 설정하여 해당 필드가 낙관적 동시성 확인에 사용되는 것을 중지 할 수 있습니다.

다음을 사용할 수도 있습니다. 라코 디스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top