2010-11-18 76 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使用不同的名稱