2010-11-18 87 views
0

我试图学习同步框架。 我已经按照步骤MSDN文档,它没有工作。惊讶? 我需要的是将SQL Express数据库与SQL Express数据库同步。 虽然阅读关于配置和其他准备我需要做的,我永远不会找到这是否必须运行每次我想要使用同步。我的意思是,提供 - >同步 - >取消配置。 另一件事是,这是我一步一步的MSDN示例时,得到这个奇怪的例外。同步框架DbProvisioningException

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 
} 

任何恰当的同步采样?所以我可以正确地确定如何创建这个任务?

谢谢。

回答

0

您无需在每次同步前进行配置。配置可以是一次,然后你可以从那里同步。当然,如果在时间之后发生反拨,那么在此之后就不能完成。

就你的情况而言,正如消息所示,似乎已经存在同名的存在。通过运行检查下面的语句

select * from scope_info 

如果返回与范围名称您正试图添加行,你可以做以下的事情。

  1. 取消提供该范围的数据库。但是你需要确保范围不被其他人使用。

(OR)

  • 提供的DB使用不同的名称