【问题标题】:Sync Framework DbProvisioningException同步框架 DbProvisioningException
【发布时间】:2010-11-18 01:15:40
【问题描述】:

我正在尝试学习同步框架。 我一步一步地按照 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
}

任何适当的同步样本?所以我可以正确地弄清楚如何创建这个任务?

谢谢。

【问题讨论】:

    标签: sql-server c#-4.0 microsoft-sync-framework


    【解决方案1】:

    应该还有人感兴趣吗……

    只需在您 apply() 之前对 sourceProvision.Exists() 进行检查 http://msdn.microsoft.com/en-us/library/dd919024.aspx

    【讨论】:

      【解决方案2】:

      您无需在每次同步之前进行配置。供应可以是一次,然后您可以从那里同步。当然,如果取消配置发生在 ..sycn 之后就无法完成。

      在您的情况下,正如消息所暗示的那样,似乎已经存在同名。通过运行以下语句检查

      select * from scope_info
      

      如果它返回具有您尝试添加的范围名称的行,您可以执行以下操作。

      1. 为该范围取消配置 DB。但您需要确保该范围没有被其他任何人使用。

      (或)

      1. 为 DB 提供不同的名称

      【讨论】:

        猜你喜欢
        • 2023-03-21
        • 1970-01-01
        • 2014-02-23
        • 2010-09-19
        • 2016-07-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多