Microsoft Sync框架删除无法正常工作

时间:2014-05-15 07:14:04

标签: c# asp.net sql-server synchronization microsoft-sync-framework

我已经用两种方式在SQL Server 2008和SQL Compact数据库之间实现了同步。

它非常适合在数据库中插入和更新数据并且很好地同步。

但是如果我尝试从sql server之类的数据库中删除一条记录,那么我将与sql compact同步后再次回来。

我希望如果我从一个数据库中删除记录,则需要从其他数据库中删除。

我不知道为什么它会再次回来请帮助我。

我在这里给出的源代码。

        string serverCon = "Data Source=192.168.0.2\\sqlserver2008r2;Initial Catalog=test;Integrated Security=false;UID=sa;PWD=ifour@1234;";
        const string localCon = "Data Source=|DataDirectory|\\DB\\test.sdf;Persist Security Info=False;";


        var serverConn = new SqlConnection(serverCon);
        var clientSqlConn = new SqlCeConnection(localCon);



        DbSyncScopeDescription scopeDesc = new DbSyncScopeDescription("filter");

        DbSyncTableDescription customerDescription =
           SqlSyncDescriptionBuilder.GetDescriptionForTable("Demo", serverConn);
        scopeDesc.Tables.Add(customerDescription);

        SqlSyncScopeDeprovisioning serverSqlDepro = new SqlSyncScopeDeprovisioning(serverConn);
        SqlSyncScopeProvisioning serverTemplate = new SqlSyncScopeProvisioning(serverConn, scopeDesc, SqlSyncScopeProvisioningType.Template);
        serverTemplate.ObjectSchema = "dbo";

        serverTemplate.Tables["Demo"].AddFilterColumn("bit");
        serverTemplate.Tables["Demo"].FilterClause = "[side].[bit] = @customertype";
        SqlParameter param = new SqlParameter("@customertype", SqlDbType.Bit, 1);
        serverTemplate.Tables["Demo"].FilterParameters.Add(param);

        if (serverTemplate.TemplateExists("filter"))
        {
            serverSqlDepro.DeprovisionTemplate("filter");
        }

        serverTemplate.Apply();


        SqlSyncScopeProvisioning serverProvRetail = new SqlSyncScopeProvisioning(serverConn);
        serverProvRetail.ObjectSchema = "dbo";
        serverProvRetail.PopulateFromTemplate("RetailCustomers", "filter");
        serverProvRetail.Tables["Demo"].FilterParameters["@customertype"].Value = false;


        if (serverProvRetail.ScopeExists("filter"))
        {
            serverSqlDepro.DeprovisionScope("filter");
        }
        //serverProvRetail.PopulateFromScopeDescription(scopeDesc);
        serverProvRetail.Apply();
        serverProvRetail.PopulateFromScopeDescription(scopeDesc);
        SqlCeSyncScopeDeprovisioning clientSqlCeDepro = new SqlCeSyncScopeDeprovisioning(clientSqlConn);
        var clientSqlDesc = SqlSyncDescriptionBuilder.GetDescriptionForScope("RetailCustomers", null, "dbo", serverConn);
        var clientSqlConfig = new SqlCeSyncScopeProvisioning(clientSqlConn, clientSqlDesc);

        if (clientSqlConfig.ScopeExists("RetailCustomers"))
        {
            clientSqlCeDepro.DeprovisionScope("RetailCustomers");
        }

        clientSqlConfig.Apply();

        SampleSyncOrchestrator syncOrchestrator;
        SyncOperationStatistics syncStats;

        // Data is downloaded from the server to the SQL Server client.
        syncOrchestrator = new SampleSyncOrchestrator(
            new SqlCeSyncProvider("RetailCustomers", clientSqlConn, null),
            new SqlSyncProvider("RetailCustomers", serverConn, null, "dbo")
            );
        syncStats = syncOrchestrator.Synchronize();
    }

public class SampleSyncOrchestrator : SyncOrchestrator
{
        public  SampleSyncOrchestrator(RelationalSyncProvider localProvider, RelationalSyncProvider remoteProvider)
        {

        this.LocalProvider = localProvider;
        this.RemoteProvider = remoteProvider;
        this.Direction = SyncDirectionOrder.DownloadAndUpload;
        }
}

0 个答案:

没有答案