Sync Framework DbProvisioningException

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

DbProvisioningException "MomScope" уже существует... не должно существовать?

Код:

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
}

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

Спасибо.


person George Taskos    schedule 18.11.2010    source источник


Ответы (2)


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

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

person stombeur    schedule 03.03.2011

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

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

select * from scope_info

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

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

(OR)

  1. Подготовьте БД под другим именем
person Vamsi Krishna Rallabhandi    schedule 08.02.2011