2010-05-15 2 views
0

변경할 수있는 submitchanges 작업을 수행 한 후 뷰/테이블 행을 나타내는 LINQ 개체를 새로 고쳐야합니까?변경할 수있는 submitchanges 작업을 수행 한 후 뷰/테이블 행을 나타내는 LINQ 개체를 새로 고쳐야합니까?

의 내가

Event _event = new Event 
{ 
someproperty = "this"; 
}; 

DataContext.Events.InsertOnSubmit(_event); 

DataContext.SubmitChanges(); 

//some operations 

_event.someproperty = "that"; 
DataContext.SubmitChanges(); 

가의 몇 가지 작업을 수행하는 동안, DataContext에의 다른 인스턴스와 다른 스레드가, 같은 _event을 변경하고 제출 수 있다는 식에 추가하자가 있다고 가정 해 봅시다.

가끔 행을 찾을 수 없거나 변경되었다는 예외가 발생합니다. _event를 다시 선택하지 않고도이 문제를 해결할 수있는 방법이 있습니까?

+0

이벤트 클래스에 좋은 이름이 아닌이 C#을 키워드 (가 낮은 경우에도 THO)도로 –

답변

2

Linq와 함께 낙관적 동시성을 사용한다고 가정합니다. 즉, DB에서 객체를 업데이트 할 때 update 문은 행이 변경되지 않았는지 확인합니다.

개체의 초기 읽기 (또는 생성)와 업데이트 사이에서 다른 프로세스가 DB의 개체를 변경하면 Linq는 ChangeConflictException을 발생시킵니다. 이 예외를 잡아서 충돌을 처리 할 수 ​​있습니다 (DB에서 객체를 다시로드하거나 DB 값을 덮어 씀). 여기

자세한 내용 :

try 
{ 
_event.someproperty = "that"; 
DataContext.SubmitChanges(); 
} 

catch (ChangeConflictException e) 
{ 
    foreach (ObjectChangeConflict occ in db.ChangeConflicts) 
    { 
     // All database values overwrite current values. 
     occ.Resolve(RefreshMode.OverwriteCurrentValues); 
    } 
} 

여러 가지 재생 모드가 있습니다 그것은 정말 당신이 당신의 응용 프로그램이 작동하는 방법에 따라 달라집니다 : 같은 것을 볼 수 있었다 http://msdn.microsoft.com/en-us/library/bb399373%28v=VS.90%29.aspx

귀하의 코드입니다. 이 답변에서 자세한 내용을 찾아주세요 :

1

엔티티가 동일한 DataContext에있는 경우 그렇지 않지만 데이터에 액세스하는 추가 데이터 코어 (예 : 다른 프로세스)가있는 경우 커밋을 시도하기 전에이를 인식하고 새로 고쳐야합니다.

관련 문제