2 개의 데이터베이스를 동기화하는 응용 프로그램이 있습니다. 중앙 데이터베이스는 Sql Server 2008에서 호스팅되고 로컬 데이터베이스는 Sql Compact 3.5 데이터베이스입니다.Sql Compact 3.5 동기화 실패
가끔씩 동기화 범위에 포함 된 테이블 중 하나의 스키마를 업그레이드해야하며 다시 프로비저닝을 해제하고 프로비저닝하지 않으므로 this 접근 방식을 사용하고 Sql Compact 용으로 다음과 같은 내용이 있습니다.
public void UpdateProvisionSchema(string connString, string scopeName, string newConfigData)
{
_log.Verbose("UpdateProvisionSchema: " + scopeName);
try
{
string query = string.Format("SELECT [scope_config_id] FROM [scope_info] WHERE [sync_scope_name]='{0}'", scopeName);
Guid config_id = (Guid)SqlCompactManager.ExecuteScalar(connString, query);
string updateCommand = string.Format("UPDATE scope_config SET [config_data]='{0}' WHERE [config_id] ='{1}'", newConfigData, config_id);
SqlCompactManager.ExecuteCommand(connString, updateCommand);
}
catch (Exception ex)
{
_log.Error(ex, string.Format("Failed to upgrade schema for scope {0}", scopeName));
throw new Exception(string.Format("Update of provisioned schema failed for scope: {0}", scopeName));
}
}
및 수동으로 내 테이블의 구성 범위를 변경합니다. 내가 빈 테이블을 프로비저닝하여 생성하기 때문에 내가 보낸 범위 설정이 올바른 것 같습니다.
동기화 범위에 포함 된 테이블에 데이터 열을 추가했는데 (데이터는 중앙 데이터베이스에서 로컬 데이터베이스로만 다운로드 됨) 이제 ApplyChangeFailed에서 오류가 발생합니다.
Sql Compact 데이터베이스에서 문제가있는 동기화 범위에 포함 된 테이블에는 중앙 테이블에없는 __sysTrackingContext라는 열이 있습니다.
처음으로 테이블을 만들고 프로비저닝 한 다음 2 개의 새로운 열 (BusinessType, HideCommentAndSerialNumber)을 추가했습니다. |
.. :
중앙 : 나는 열을 DbApplyChangeFailedEventArgs보고 살펴보면, 나는 다음을 참조 사업 유형 | HideCommentAndSerialNumber | sync_update_peer_timestamp | sync_update_peer_key | sync_create_peer_timestamp | sync_create_peer_key |
로컬 :
.. | __sysTrackingContext | 사업 유형 | sync_update_peer_key | HideCommentAndSerialNumber | sync_update_peer_timestamp | sync_create_peer_key | sync_create_peer_timestamp |
내가 뭘 잘못하고 있니?