현재 프로젝트에 SQL Server 2008, Visual Studio 2008, linq, ado.net을 사용하고 있습니다. 이 프로젝트는 웹 및 데스크톱에서 구현됩니다.identity_insert 및 동기화 문제
이제 내 문제는 웹 데이터베이스와 데스크톱 db 간의 데이터 동기화입니다.
여기동기화는 다음과 같다 : 클라이언트에 삽입
- 새로운 데이터는 서버에 동기화됩니다.
- 클라이언트의 업데이트 된 데이터가 서버에 동기화됩니다.
여기 내 테이블 구조를 보여 드리겠습니다.
우리가 내 테이블 이름을 가정 해 봅시다 필드
고객
...................
customerno, BIGINT, 기본 키와 "고객"입니다 , null가 아닌, 정체성 사실
FIRSTNAME ...
LASTNAME, ...
내가 클라이언트에서 동일한 테이블을해야하지만, 기본 키 정체성 20000이 시작됩니다 (1부터 시작) 기본 키 ID는 클라이언트 시스템의 수에 따라 다릅니다. 표 1 개 레코드
서버가 customerno 1로 시작 = 다음과 같은 시나리오를 생각해 보자
CLIENT1 = customerno 테이블이 개 레코드, 20000로 시작
CLIENT2 = customerno 테이블
이제 LINQ 그다지지지 IDENTITY_INSERT, IM 사용 ado.net으로 다음 코드
cmd.CommandText = "set identity_insert " + tableName + " on";
cmd.ExecuteNonQuery();
foreach (string query in this.queries)
{
cmd.CommandText = query; // this is my insert query
cmd.ExecuteNonQuery();
}
cmd.CommandText = "set identity_insert " + tableName + " off";
cmd.ExecuteNonQuery();
를 사용 CLIENT1에서 동기화를 누르면
012,351,내 코드에서 먼저 identity_insert를 on으로 설정하고 데이터를 삽입 한 다음 마지막으로 identity_insert를 설정 해제하십시오.
여기 내 문제는 데이터가 client1에서 동기화 된 후 이고 두 개의 레코드가 customerno가있는 서버에 20001,20002로 삽입됩니다. http://msdn.microsoft.com/en-us/library/ms188059.aspx
서버 customerno 컬럼의 신원에 따라
(이 경우는 20002이 될 것이다)를 최대 값으로 설정된다. 내가 서버에 데이터를 삽입 할 때
은 그래서 지금, 내가 최대 값을 적용하려면 서버 ID 열을 원하는 그나마 여기 20003.
로 customerno에 삽입합니다.
위의 경우를 고려하여 동기화하기 전에 서버에 레코드가 1 개 있고 ID가 1이므로 동기화 (하나 이상의 클라이언트) 후 서버의 다음 ID (사용자 정의)를 2로 설정하고, 3,4 ..... 서버에 새로 삽입 된 데이터입니다.
여기서 모든 클라이언트는 언제든지 서버와 데이터를 동기화 할 수 있습니다.
GUID가 좋으므로 새 열을 사용하십시오. 그럼 내 데이터베이스에있는 모든 테이블을 변경해야합니다. – Harsha
데이터베이스에있는 고객과 관련된 모든 테이블을 변경하는 데 문제가있는 경우 수정 된 답변 –