2009-03-13 3 views
0

데이터베이스에서 1000 개의 행을 가져와야하며 동시에 '처리 중'으로 태그를 지정해야합니다. 이렇게하면 다른 스레드가 동일한 1000 개의 행을 가져 와서 처리 할 수 ​​없습니다. LINQ와linq에서 원자 적으로 업데이트하고 쿼리 할 수 ​​있습니까?

제가 같은 것을 수행

MSG를

= (m에서 database.messages (m.status == MESSAGESTATUSINIT) 선택에서 m) .Take (1000) .ToList();

나는 동시에 MESSAGESTATUSPROCESSING (으)로 상태를 설정하려고합니다. 물론 이것은 반드시 원자 적이어야합니다.

어떤 아이디어가 있습니까? 또는 SQL로 돌아 갔습니까?

감사합니다.

답변

2

linq2sql에서는이를 수행 할 수 없습니다. 저장 프로 시저를 사용하고 메시지를 출력하도록 디자이너에서 구성합니다. 이렇게하면로드 된 엔터티를 조작하고 변경 내용을 정상적으로 커밋 할 수 있습니다. 대한

확인이를 (특히 데이터 모델 클래스에 SPROC 방법의 반환 형식 매핑)을 수행하는 방법 : http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retrieving-data-using-stored-procedures.aspx

+0

그게 내가 할 수있는 방법이야. –

+0

위대한! 감사! – Toad

0

코드를 잠금 장치 {}로 묶을 수 있습니다.

Lock Keyword

+0

사실, 그러나 나는 이러한을 얻을하는 (심지어 다른 컴퓨터에서) 다른 프로세스를 원한다 기록. 또한 1000 개의 레코드를 통해 foreach를 수행하고 1 개의 원자 SQL 문으로 수행 할 수있을 때 처리하도록 설정합니다. – Toad

1

Linq는 자체가이 기능을 제공하지 않을; Linq == 검색어를 명심하십시오. 데이터 업데이트는 다른 곳에서 발생합니다.

이 인스턴스에서 결과를 반환하기 위해 저장 프로 시저를 작성하는 것이 더 나을 것입니다. sproc은 테이블을 업데이트하고 결과를 원자 적으로 반환 할 수 있으므로 응용 프로그램은 단일 호출을 갖게됩니다.

+1

linq2sql은 쿼리 일뿐만 아니라이 시나리오를 지원하지 않습니다. 일괄 업데이트를 수행하는 일부 블로그에는 맞춤 메소드가 있지만 결과 세트를 동시에 반환하지는 않습니다. – eglasius

관련 문제