我正在尝试使用 Microsoft Sync Framework 来同步 2 SQL Server 2005 数据库(服务器和客户端)。数据库中有多个表,它们之间有很多外键关系。我正在使用 SyncOrchestrator 来同步两个数据库。
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;
在函数 ConfigureClientProvider 和 ConfigureServerProvider 中,我正在初始化连接并检查范围是否不存在然后创建它:
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;
}
现在,当我尝试运行同步时,它可以很好地处理更新的数据,但是当数据库中有任何插入或删除时,我遇到了外键问题。例如
INSERT 语句与 FOREIGN KEY 约束“FK_Employees_Departments”冲突。冲突发生在数据库“Sync_Client”、表“dbo.Departments”、列“DepartmentID”中。
如果我对表格的顺序进行了一些更改,那么我能够解决由于删除而出现的另一种情况。
DELETE 语句与 REFERENCE 约束“FK_Employees_Departments”冲突。冲突发生在数据库“Sync_Client”、表“dbo.Employees”、列“DepartmentID”中。
有谁知道如何解决这个问题。我认为同步框架无法以正确的顺序执行更改。这个顺序取决于几个因素,比如外键关系、命令类型,例如插入、更新等。我真的被困在这里了。早期帮助将不胜感激。