Sync Framework DbProvisioningException - PullRequest
1 голос
/ 18 ноября 2010

Я пытаюсь изучить Sync Framework.Я следовал шаг за шагом Документации MSDN, и это не работало.Удивлены ?!Что мне нужно, это синхронизировать базу данных SQL Express с базой данных SQL Express.Читая о подготовке и другой подготовке, которую я должен сделать, я никогда не мог найти, должен ли это выполняться каждый раз, когда я хочу использовать синхронизацию.Я имею в виду предоставление -> синхронизация -> депровидение.Другое дело, что я получаю это странное исключение, делая шаг за шагом пример MSDN.

DbProvisioningException "MomScope" уже существует ... не должно быть?1005 *

private void InitializeSync()
{
    SqlConnection sourceConn = new SqlConnection(ConfigManager.Config.SourceSyncConnectionString);
    SqlConnection myConn = new SqlConnection(ConfigManager.Config.ConnectionString);

    #region SET SOURCE PROVIDER

    SqlSyncProvider sourceSqlProv = new SqlSyncProvider("MomSync", sourceConn);

    DbSyncScopeDescription sourceScope = new DbSyncScopeDescription("MomScope");

    DbSyncTableDescription productsSourceTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Mom_Products", sourceConn);
    DbSyncTableDescription customersSourceTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Mom_Customer", sourceConn);
    DbSyncTableDescription ordersSourceTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Mom_Orders", sourceConn);
    DbSyncTableDescription paymentsSourceTableDesc = SqlSyncDescriptionBuilder.GetDescriptionForTable("Mom_Payments", sourceConn);

    sourceScope.Tables.Add(productsSourceTableDesc);
    sourceScope.Tables.Add(customersSourceTableDesc);
    sourceScope.Tables.Add(ordersSourceTableDesc);
    sourceScope.Tables.Add(paymentsSourceTableDesc);

    SqlSyncScopeProvisioning sourceProvision = new SqlSyncScopeProvisioning(sourceConn, sourceScope);
    sourceProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);

    try
    {
        sourceProvision.Apply();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    #endregion

    #region SET MY PROVIDER

    SqlSyncProvider myProvider = new SqlSyncProvider("MomSync", myConn);

    DbSyncScopeDescription scopeSourceDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("MomScope", sourceConn); <===== DbProvisioningException (MomScope already exists????)
    SqlSyncScopeProvisioning myProvision = new SqlSyncScopeProvisioning(myConn, scopeSourceDesc);

    try
    {
        myProvision.Apply();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    #endregion

    #region SET SYNC ORCHESTRATOR

    OrcheStrator = new SyncOrchestrator
                       {
                           LocalProvider = myProvider,
                           RemoteProvider = sourceSqlProv,
                           Direction = SyncDirectionOrder.UploadAndDownload
                       };

    ((SqlSyncProvider)OrcheStrator.LocalProvider).ApplyChangeFailed += ApplyChangeFailedHandler;

    #endregion
}

Есть ли правильные образцы синхронизации?Так что я могу понять, как создать эту задачу?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 03 марта 2011

Если кому-то все еще интересно ...

Просто реализуйте проверку sourceProvision.Exists () прямо перед тем, как применять () http://msdn.microsoft.com/en-us/library/dd919024.aspx

0 голосов
/ 08 февраля 2011

Вам не нужно обеспечивать каждый раз перед синхронизацией.Предоставление может быть один раз, а затем вы можете синхронизировать с этого момента.Конечно, если удаление происходит во время. После этого невозможно выполнить какие-либо действия.

В вашем случае, как следует из сообщения, кажется, что уже существует с тем же именем.Проверьте, запустив следующий оператор

select * from scope_info

Если он возвращает строки с именем области действия, которые вы пытаетесь добавить, вы можете сделать следующее:

  1. Отменить выделение БД для этогоОбъем.Но вам нужно убедиться, что область не используется кем-либо еще.

(ИЛИ)

Предоставьте БД другое имя
...