2 개의 SQL Server 2005 데이터베이스 (서버 및 클라이언트)를 동기화하는 데 Microsoft Sync Framework를 사용하려고합니다. 데이터베이스에는 데이터베이스간에 여러 개의 외래 키 관계가있는 테이블이 여러 개 있습니다. SyncOrchestrator를 사용하여 두 데이터베이스를 동기화합니다. 함수 ConfigureClientProvider 및 ConfigureServerProvider에서 관계형 데이터베이스를 동기화하는 동안 Microsoft Sync 프레임 워크 문제가 발생했습니다.
string clientConnectionString = "<connection string>";
string serverConnectionString = "<connection string>";
SqlSyncProvider localProvider
= ConfigureClientProvider(clientConnectionString);
SqlSyncProvider remoteProvider
= ConfigureServerProvider(serverConnectionString);
SyncOrchestrator orchestrator = new SyncOrchestrator();
orchestrator.LocalProvider = localProvider;
orchestrator.RemoteProvider = remoteProvider;
orchestrator.Direction = SyncDirectionOrder.Download;
내가 범위를하지 않는 경우는 종료는 다음을 만들 연결을 초기화하고 확인하고 있습니다 :
public static SqlSyncProvider ConfigureClientSyncProvider()
{
SqlSyncProvider provider = new SqlSyncProvider();
provider.Connection = new SqlConnection(Configs.ConnectionString);
DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("Test1");
SqlSyncScopeProvisioning serverConfig = new SqlSyncScopeProvisioning();
if (!serverConfig.ScopeExists("Test1", (System.Data.SqlClient.SqlConnection)provider.Connection))
{
scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable
("Employees", (SqlConnection)provider.Connection));
scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable
("Profiles", (SqlConnection)provider.Connection));
scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable
("Department", (SqlConnection)provider.Connection));
serverConfig.PopulateFromScopeDescription(scopeDesc);
serverConfig.SetCreateTableDefault(DbSyncCreationOption.Skip);
serverConfig.Apply((System.Data.SqlClient.SqlConnection)provider.Connection);
}
return provider;
}
를 이제 동기화를 실행하려고하면 업데이트 된 데이터에 대한 고급의 작동하지만 데이터베이스에 삽입이나 삭제가있을 때 외래 키 문제가 발생했습니다. 예 :
외래 키 제약 "FK_Employees_Departments"와 충돌 INSERT 문. 데이터베이스 "Sync_Client"테이블 "dbo.Departments", 열 'DepartmentID'에서 충돌이 발생했습니다.
테이블 순서대로 변경하면 삭제로 인해 다른 사례가 하나가 발생할 수 있습니다.
참조 제약 "FK_Employees_Departments"와 충돌 DELETE 문. 데이터베이스 "Sync_Client", 테이블 "dbo.Employees", 열 'DepartmentID'에서 충돌이 발생했습니다.
이 문제를 어떻게 해결할 수 있는지 전혀 알지 못합니다. 내가 생각하기에 동기화 프레임 워크는 올바른 순서로 변경 사항을 실행하는 것을 속성으로 처리 할 수 없다고 생각합니다. 이 순서는 외래 키 관계, 명령의 유형과 같은 여러 요소에 따라 달라집니다. 삽입, 업데이트 등. 나는 정말로 여기에서 붙어있다. 조기 도움을 주시면 감사하겠습니다.
나는 당신이 FK와 똑같은 문제를 겪고있는 것처럼 정확하게 일하고 있습니다. 귀하의 회신을 기다리겠습니다. – Belliez
@Belliez,이 문제를 해결할 수있는 유일한 방법은 계단식 삭제를 사용하는 것입니다. 다음은 mdsn 포럼에 게시 한 또 다른 스레드입니다. http://social.microsoft.com/Forums/en-US/syncdevdiscussions/thread/0e8464a4-41a5-4897-b3d2-f14a0cf5d4b1 –