/// <summary> /// Utility function that will create a SyncOrchestrator and synchronize the two passed in providers /// </summary> /// <param name="localProvider">Local store provider</param> /// <param name="remoteProvider">Remote store provider</param> /// <returns></returns> public SyncOperationStatistics SynchronizeProviders(string ScopeName, string clientConnectionString, string serverConnectionString, KnowledgeSyncProvider localProvider, KnowledgeSyncProvider remoteProvider) { SyncOrchestrator orchestrator = new SyncOrchestrator(); orchestrator.LocalProvider = localProvider; orchestrator.RemoteProvider = remoteProvider; orchestrator.Direction = SyncDirectionOrder.UploadAndDownload; SyncConflictResolver ConflictResolver = new SyncConflictResolver(); ConflictResolver.ClientDeleteServerUpdateAction = ResolveAction.ServerWins; ConflictResolver.ClientUpdateServerDeleteAction = ResolveAction.ServerWins; ConflictResolver.ClientInsertServerInsertAction = ResolveAction.ServerWins; ConflictResolver.ClientUpdateServerUpdateAction = ResolveAction.ServerWins; //Check to see if any provider is a SqlCe provider and if it needs schema CheckIfProviderNeedsSchema(localProvider as SqlSyncProvider, serverConnectionString); CheckIfProviderNeedsSchema(ScopeName, clientConnectionString, serverConnectionString, remoteProvider as SqlSyncProviderProxy); SyncOperationStatistics stats = orchestrator.Synchronize(); return(stats); }
public bool Sync(string clientConnectionstring) { SqlConnection clientConnection = new SqlConnection(); clientConnection.ConnectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=VideothequeDB;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; // ServerSideSync String scope = "VideoScope"; SqlSyncProvider serverProvider = new SqlSyncProvider(); serverProvider.ScopeName = scope; serverProvider.Connection = new SqlConnection(); serverProvider.Connection.ConnectionString = @"Data Source = (localdb)\MSSQLLocalDB; Initial Catalog = MoviesDB; Integrated Security = True; Connect Timeout = 30; Encrypt = False; TrustServerCertificate = True; ApplicationIntent = ReadWrite; MultiSubnetFailover = False"; //Config of the Scope DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription(scope); SqlSyncScopeProvisioning serverConfig = new SqlSyncScopeProvisioning((System.Data.SqlClient.SqlConnection)serverProvider.Connection); if (!serverConfig.ScopeExists(scope)) { serverProvider.ObjectSchema = "dbo."; scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Actor", (System.Data.SqlClient.SqlConnection)serverProvider.Connection)); scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Director", (System.Data.SqlClient.SqlConnection)serverProvider.Connection)); scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Genre", (System.Data.SqlClient.SqlConnection)serverProvider.Connection)); scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Movie", (System.Data.SqlClient.SqlConnection)serverProvider.Connection)); scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("MovieActor", (System.Data.SqlClient.SqlConnection)serverProvider.Connection)); scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("MovieDirector", (System.Data.SqlClient.SqlConnection)serverProvider.Connection)); scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("MovieGenre", (System.Data.SqlClient.SqlConnection)serverProvider.Connection)); serverConfig.PopulateFromScopeDescription(scopeDesc); //indicate that the base table already exists and does not need to be created serverConfig.SetCreateTableDefault(DbSyncCreationOption.Skip); //provision the server serverConfig.Apply(); } //ClientSideSyncserverConfig SqlSyncProvider clientProvider = new SqlSyncProvider(); clientProvider.ScopeName = scope; clientProvider.Connection = new SqlConnection(); clientProvider.Connection.ConnectionString = @"Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=VideothequeDB;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=True;ApplicationIntent=ReadWrite;MultiSubnetFailover=False"; //Config of the Scope DbSyncScopeDescription scopeDescClient = new DbSyncScopeDescription(scope); SqlSyncScopeProvisioning clientConfig = new SqlSyncScopeProvisioning((System.Data.SqlClient.SqlConnection)clientProvider.Connection); if (!clientConfig.ScopeExists(scope)) { serverProvider.ObjectSchema = "dbo."; scopeDescClient.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Actor", (System.Data.SqlClient.SqlConnection)clientProvider.Connection)); scopeDescClient.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Director", (System.Data.SqlClient.SqlConnection)clientProvider.Connection)); scopeDescClient.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Genre", (System.Data.SqlClient.SqlConnection)clientProvider.Connection)); scopeDescClient.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Movie", (System.Data.SqlClient.SqlConnection)clientProvider.Connection)); scopeDescClient.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("MovieActor", (System.Data.SqlClient.SqlConnection)clientProvider.Connection)); scopeDescClient.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("MovieDirector", (System.Data.SqlClient.SqlConnection)clientProvider.Connection)); scopeDescClient.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("MovieGenre", (System.Data.SqlClient.SqlConnection)clientProvider.Connection)); clientConfig.PopulateFromScopeDescription(scopeDescClient); //indicate that the base table already exists and does not need to be created clientConfig.SetCreateTableDefault(DbSyncCreationOption.Skip); //provision the server clientConfig.Apply(); } // create the sync orhcestrator SyncOrchestrator syncOrchestrator = new SyncOrchestrator(); syncOrchestrator.LocalProvider = serverProvider; // set the remote provider of orchestrator to a server sync provider associated with // the ProductsScope in the SyncDB server database syncOrchestrator.RemoteProvider = clientProvider; // set the direction of sync session to Upload and Download syncOrchestrator.Direction = SyncDirectionOrder.UploadAndDownload; // subscribe for errors that occur when applying changes to the client ((SqlSyncProvider)syncOrchestrator.LocalProvider).ApplyChangeFailed += new EventHandler <DbApplyChangeFailedEventArgs>(Program_ApplyChangeFailed); SyncConflictResolver ConflictResolver = new SyncConflictResolver(); ConflictResolver.ClientDeleteServerUpdateAction = ResolveAction.ServerWins; ConflictResolver.ClientUpdateServerDeleteAction = ResolveAction.ServerWins; ConflictResolver.ClientInsertServerInsertAction = ResolveAction.ServerWins; ConflictResolver.ClientUpdateServerUpdateAction = ResolveAction.ServerWins; // execute the synchronization process SyncOperationStatistics syncStats = syncOrchestrator.Synchronize(); // print statistics return(true); }
/// <summary> /// Utility function that will create a SyncOrchestrator and synchronize the two passed in providers /// </summary> /// <param name="localProvider">Local store provider</param> /// <param name="remoteProvider">Remote store provider</param> /// <returns></returns> public SyncOperationStatistics SynchronizeProviders(string ScopeName, string clientConnectionString, string serverConnectionString, KnowledgeSyncProvider localProvider, KnowledgeSyncProvider remoteProvider) { SyncOrchestrator orchestrator = new SyncOrchestrator(); orchestrator.LocalProvider = localProvider; orchestrator.RemoteProvider = remoteProvider; orchestrator.Direction = SyncDirectionOrder.UploadAndDownload; SyncConflictResolver ConflictResolver = new SyncConflictResolver(); ConflictResolver.ClientDeleteServerUpdateAction = ResolveAction.ServerWins; ConflictResolver.ClientUpdateServerDeleteAction = ResolveAction.ServerWins; ConflictResolver.ClientInsertServerInsertAction = ResolveAction.ServerWins; ConflictResolver.ClientUpdateServerUpdateAction = ResolveAction.ServerWins; //Check to see if any provider is a SqlCe provider and if it needs schema CheckIfProviderNeedsSchema(localProvider as SqlSyncProvider, serverConnectionString); CheckIfProviderNeedsSchema(ScopeName, clientConnectionString, serverConnectionString, remoteProvider as SqlSyncProviderProxy); SyncOperationStatistics stats = orchestrator.Synchronize(); return stats; }