I have implemented synchronize between SQL server 2008 and SQL Compact database with two way.
It is perfectly working with insert and update data in database and synced very well.
But if I try to delete a record from one database like sql server after that i synced with sql compact it is come back again.
I want that if I delete record from one database it is necessary to delete from other database.
I don't know why it is come back again please help me.
My source code given here.
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.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;
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;
}
}