Наша центральная база данных должна синхронизироваться в режиме хаба и спиц.
Нам необходимо иметь возможность разбивать данные таким образом, чтобы данные клиента реплицировались локально только на этот клиент.
Кто-нибудь сталкивался с этой проблемой?
MSF предоставляет области синхронизации - объявления таблиц должны быть синхронизированы с возможностью указания столбца фильтра и предложения фильтра, однако, похоже, нет способа передать параметр (скажем, clientID) в фильтр.
Вот пример из документации msdn:
' Create a scope named "filtered_customer", and add two tables to the scope.
' GetDescriptionForTable gets the schema of each table, so that tracking
' tables and triggers can be created for that table.
Dim scopeDesc As New DbSyncScopeDescription("filtered_customer")
scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("Customer", serverConn))
scopeDesc.Tables.Add(SqlSyncDescriptionBuilder.GetDescriptionForTable("CustomerContact", serverConn))
' Create a provisioning object for "filtered_customer" and specify that
' base tables should not be created (They already exist in SyncSamplesDb_SqlPeer1).
Dim serverConfig As New SqlSyncScopeProvisioning(scopeDesc)
serverConfig.CreateTableDefault = DbSyncCreationOption.Skip
' Specify which column(s) in the Customer table to use for filtering data,
' and the filtering clause to use against the tracking table.
' "[side]" is an alias for the tracking table.
serverConfig("Customer").AddFilterColumn("CustomerType")
serverConfig("Customer").FilterClause = "[side].[CustomerType] = 'Retail'"
' Configure the scope and change tracking infrastructure.
serverConfig.Apply(serverConn)
Наша проблема в том, что нам нужен фильтр для исключения clientID в качестве параметра времени выполнения.
Поддерживается ли это в MSF?
Если не возможно, это может быть достигнуто путем объявления нескольких областей действия - объявите область действия для каждого клиента с предложением фильтра, указывающим clientID. Это потребует повторной подготовки сервера каждый раз, когда мы создаем нового клиента .... верно?
Кто-нибудь знает, можно ли использовать класс SqlSyncScopeProvisioning для добавления новой области в базу данных, которая уже была подготовлена с существующей областью?
Похоже, что MSF был разработан для поддержки нескольких областей, мне не ясно, как класс SqlSyncScopeProvisioning используется для добавления дополнительных областей.