我正在使用以下代码示例(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 ;
但到目前为止还没有运气。
我非常感谢有人可以指导我解决这个问题。
答案 0 :(得分:3)
本地提供商处的ApplyChangeFailed事件会在本地提供商处发生冲突时触发
当远程提供程序发生冲突时,会触发远程提供程序上的ApplyChangeFailed事件。意思是,它们会被单独解雇。远程端的冲突不会导致本地提供者ApplyChangeFailed事件触发,反之亦然。
SqlSyncProvider不允许您通过Configuration属性设置冲突解决策略。如果查看文档,它会明确指出Configuration属性不是由SqlSyncProvider继承的RelationalSyncProvider实现的。
要设置冲突解决方案,您必须在ApplyChangeFailed事件中执行此操作。对于每个冲突,您可以将Action属性设置为您想要的相应冲突解决方案。
请参阅:How to: Handle Data Conflicts and Errors for Database Synchronization (SQL Server)
答案 1 :(得分:0)
这是我的SqlSync提供程序init的源代码。你能不能告诉我启动时有什么问题
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;
}
答案 2 :(得分:0)
感谢您的答案和所有帮助。我发现了这个问题。我的本地提供程序数据库是污染的数据库,它运行不同的同步范围。我已经采用了新的数据库并运行同步并测试冲突解决方案。都好。 ApplyChangeFailed事件触发没有任何问题。