我试图使用Microsoft同步框架同步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语句冲突与 外键约束 “FK_Employees_Departments”。该 冲突发生于数据库 “Sync_Client”,表 “dbo.Departments”,列 'DepartmentID的'。
如果我按照表格的顺序做一些改变,那么我能够解决一个由于删除而出现的另一种情况。
DELETE语句冲突与 的REFERENCE约束 “FK_Employees_Departments”。该 冲突发生于数据库 “Sync_Client”,表 “dbo.Employees”, 列 'DepartmentID的'。
没有人有任何想法如何可以固定。我认为同步框架无法以正确的顺序执行更改。这个顺序取决于几个因素,如外键关系,命令的类型,例如插入,更新等。我真的被困在这里。早期的帮助将不胜感激。
你有没有得到这个工作,因为我也做的完全一样,你是和具有与FK同样的问题。期待你的回复。 – Belliez 2010-04-09 15:24:33
@Belliez,解决此问题的唯一方法是使用级联删除。这里是另一个线程,我发布在mdsn论坛 - http://social.microsoft.com/Forums/en-US/syncdevdiscussions/thread/0e8464a4-41a5-4897-b3d2-f14a0cf5d4b1 – 2010-04-12 04:11:00