Я пытаюсь использовать 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 конфликтует с
ССЫЛОЧНОЕ ограничение
"FK_Employees_Departments".
конфликт произошел в базе данных
"Sync_Client", таблица "dbo.Employees",
столбец DepartmentID.
Кто-нибудь знает, как это можно исправить. То, что я думаю, каркас синхронизации не может обеспечить свойство выполнения изменений в правильном порядке. Этот порядок зависит от нескольких факторов, таких как отношения внешних ключей, тип команды, например, вставить, обновить и т. д. Я действительно застрял здесь. Ранняя помощь будет оценена.