2013-01-04 111 views
0

我正在使用以下代碼示例(http://code.msdn.microsoft.com/Database-SyncSQL-Server-e97d1208)開發N層同步應用程序並致力於衝突解決方案。同步框架衝突解決方案

要解決衝突,我正在使用syncProvider.ApplyChangeFailed事件對於本地同步提供程序和遠程同步提供程序。

syncProvider.ApplyChangeFailed事件在本地同步提供程序上未觸發。有趣的是,這甚至在遠程代理服務器上引發了火災。

我也試圖與

localProvider.Configuration.CollisionConflictResolutionPolicy = CollisionConflictResolutionPolicy.RenameDestination ; 
      localProvider.Configuration.ConflictResolutionPolicy = ConflictResolutionPolicy.ApplicationDefined ; 

     remoteProvider.Configuration.CollisionConflictResolutionPolicy = CollisionConflictResolutionPolicy.RenameSource ; 
     remoteProvider.Configuration.ConflictResolutionPolicy = ConflictResolutionPolicy.DestinationWins ; 

但到目前爲止沒有運氣。

我非常感謝有人能指導我解決這個問題。

回答

3

的ApplyChangeFailed事件對當地供應商的火災時,有應用上的本地供應商

的ApplyChangeFailed事件上的遠程提供商時,有遙控器上的供應商發生衝突被觸發衝突。

意思是說,他們會被單獨解僱。遠程端的衝突不會導致本地提供者的ApplyChangeFailed事件觸發,反之亦然。

SqlSyncProvider不允許您通過Configuration屬性設置衝突解決策略。如果您查看文檔,則明確指出配置屬性並未由SqlSyncProvider從中繼承的RelationalSyncProvider實現。

要設置衝突解決方案,您必須在ApplyChangeFailed事件中執行此操作。對於每個衝突,您都可以將Action屬性設置爲所需的相應衝突解決方案。

看到:How to: Handle Data Conflicts and Errors for Database Synchronization (SQL Server)

+0

感謝您的回覆。我已經針對衝突的數據行1測試了下面的場景。SyncDirectionOrder.Upload:這會觸發遠程提供程序中的事件,並且可以解決衝突。 2. SyncDirectionOrder.Download:這不會觸發本地提供商中的衝突。但它應該開火。 – Mahesh

+0

爲您的第二種情況,您是否在同步之前更新本地和遠程的行? – JuneT

+0

是的我喜歡。我更新本地和遠程SQL Server中具有不同值的行。 – Mahesh

0

這裏是SqlSync提供商初始化我的源代碼。你可以請我說我是否有任何啓動問題

public  SqlSyncProvider ConfigureSqlSyncProvider(SqlDatabase database , IList<string> tableNames) 
     { 
      SqlSyncProvider syncProvider = new SqlSyncProvider(); 


        syncProvider.ObjectSchema = Constant.ObjectScehamPrefix; 
      syncProvider.ScopeName = (Constant.ScopeName); 
      //syncProvider.Configuration.ConflictResolutionPolicy = ConflictResolutionPolicy.SourceWins ; 
      syncProvider.Connection = new SqlConnection(database.ConnectionString); 
      DbSyncScopeDescription dbSyncScopeDes = new DbSyncScopeDescription(Constant.ScopeName); 
      SqlSyncScopeProvisioning serverConfig = new SqlSyncScopeProvisioning((SqlConnection)syncProvider.Connection); 
      serverConfig.ObjectSchema = Constant.ObjectScehamPrefix; 



      if(!serverConfig.ScopeExists(Constant.ScopeName)) 
      { 

       // DbSyncTableDescription newTableDescription = new DbSyncTableDescription("Profile.Address"); 
       DbSyncTableDescription geoTable = SqlSyncDescriptionBuilder.GetDescriptionForTable( tableNames[0], 
                          (SqlConnection) 
                          syncProvider.Connection); 

       dbSyncScopeDes.Tables.Add(geoTable); 
       serverConfig.PopulateFromScopeDescription(dbSyncScopeDes); 
       serverConfig.SetCreateTableDefault(DbSyncCreationOption.Skip); 
       serverConfig.Apply(); 
      } 

       syncProvider.ApplyChangeFailed += provider_ApplyChangeFailed; 

      return syncProvider; 
     } 
0

感謝您的答案和所有幫助。我發現了這個問題。我的本地提供程序數據庫是運行不同同步範圍的污染數據庫。我採取了新的數據庫並運行同步並測試了衝突解決方案。都好。 ApplyChangeFailed事件觸發沒有任何問題。