Мы только что обновились до синхронизации 2.1 с SQL Server CE 3.5 SP2 и SQL Server, все работает отлично, кроме одной проблемы:
Когда синхронизация данных изменяется с клиента на SQL Server, у нас в этой таблице есть триггер AFTER INSERT, UPDATE
для обновления значения столбца, которое называется sync_date
, чтобы вернуть измененное значение триггера на клиентскую сторону (SQL Сервер CE 3.5), пробовал разными способами, вот пара:
Попытка № 1:
var scope = string.Format("{0}-{1}", CommonStaticConstants.COMMON_SCOPE_BIDIRECTION, auth.ApplicationUser);
GetOrchestrator(auth, GetMachineNames(auth.ApplicationUser), scope, SyncDirectionOrder.UploadAndDownload, false).Synchronize();
Попытка № 2:
var scope = string.Format("{0}-{1}", CommonStaticConstants.COMMON_SCOPE_BIDIRECTION, auth.ApplicationUser);
GetOrchestrator(auth, GetMachineNames(auth.ApplicationUser), scope, SyncDirectionOrder.Upload, false).Synchronize();
GetOrchestrator(auth, GetMachineNames(auth.ApplicationUser), scope, SyncDirectionOrder.Download, false).Synchronize();
Вот логика GetOrchestrator()
:
private static SyncOrchestrator GetOrchestrator(LoginAuthenticator auth, string machineNames, string scopeName, SyncDirectionOrder direction, bool isRescopingRequired)
{
if (!orchestratorMap.Keys.Contains(scopeName) || isRescopingRequired)
{
var destinationProxy = new SqlSyncProviderProxy(auth, machineNames, scopeName, isRescopingRequired);
orchestrator = new SyncOrchestrator();
var localProvider = new SqlCeSyncProvider();
localProvider.ScopeName = scopeName;
localProvider.Connection = new SqlCeConnection(Infrastructure.ConnectionManager.GetClientDbConnection());
localProvider.ApplyChangeFailed += OnApplyChangeFailed;
orchestrator.LocalProvider = localProvider;
orchestrator.RemoteProvider = destinationProxy;
orchestrator.Direction = direction;
CheckIfProviderNeedsSchema((SqlCeSyncProvider)orchestrator.LocalProvider, auth, machineNames, isRescopingRequired);
if (orchestratorMap.Keys.Contains(scopeName))
{
orchestratorMap.Remove(scopeName);
}
orchestratorMap.Add(scopeName, orchestrator);
}
orchestratorMap[scopeName].Direction = direction;
return orchestratorMap[scopeName];
}
Ни один из них не работает для меня, изменение данных может быть загружено правильно, но измененное значение триггера никогда не возвращалось на сторону клиента.
Есть идеи, что мне здесь не хватает? Пожалуйста, дайте мне знать, какие еще части кода мне нужно предоставить.
Заранее спасибо.
Джером