2009-11-29 3 views
0

분리 된 엔터티 또는 DTO가있는 3 계층 응용 프로그램 (WCF + LinqToSql 또는 EF)에서 데이터 동시성 문제를 처리하는 가장 좋은 방법은 무엇입니까?3-Tier 응용 프로그램에서 데이터 동시성을 처리하는 최상의 방법

감사합니다.

+0

"데이터 동시성", 스레드 동기화 또는 데이터 동시성이란 정확히 무엇을 나타 냅니까? –

+0

데이터 일관성을 의미합니다. 다른 사용자가 업데이트 한 데이터로 인해 이미 업데이트 된 데이터를 방지하기 위해 최선의 방법을 찾고 싶습니다. –

답변

0

변경된 모든 값을 where 절에 포함하십시오. 행이 업데이트되지 않으면 데이터가 오래되었다는 것을 알게되고 그 시점에서 사용자에게 알리고 취할 조치를 물을 수 있습니다.

+0

ID가 아닌 모든 엔터티 필드를 포함 할 수있는 DTO에서도 작동합니까? –

+0

예 - 변경하려는 값만 기절 할 수 있습니다. –

0

이것은 LINQ to SQL 및 EF With Column 속성의 UpdateCheck 속성에 내장되어 있습니다. 제 옵션은 LINQ와 분리 된 POCO 엔티티가있는 SQL을 사용하는 것입니다. MS SQL SERVER를 사용하고 싶다면 엔티티 매핑에 복잡한 datebase가 필요하지 않을 것입니다.

이 경우 각 테이블에서 단일 동시성 필드를 사용하고 해당 필드에 대해서만 동시성 검사를 수행합니다. 정수 필드가 좋으며 업데이트 할 때마다 단순히 증가시킵니다.

LINQ to SQL을 사용한 동시성 제어에 대한 내용은 여기를 참조하십시오. 이 너무 편리 할 것

Concurrency with LINQ to SQL

생각 :

LINQ to SQL Optimistic Concurrency Overview

P.S이 모든 솔루션이 낙관적 동시성을 사용하여 잘 될 것입니다 가정입니다. 데이터가 많이 바뀌는 고부하 서버에 있다면보다 비관적 인 동시성 솔루션이 필요할 수 있습니다.

1

WCF를 사용하여 값을 모두 전달하지 않으면 테이블에 타임 스탬프 (rowversion) 필드를 추가 할 수 있습니다. 이 값은 엔티티와 DTO의 속성으로 포함됩니다. LINQ to SQL을 사용하여 o ptimistic concurrency 검사 옵션을 사용할 수 있습니다. 모든 값을 비교하는 대신 새 타임 스탬프 속성을 지정할 수 있습니다.

관련 문제