开发者

Synchronizing Relative tables in Sync Framework 2.1

I am trying to synchronize Sql Express 2008 with Sql Compact 3.5 with help of Sync Framework 2.1

I have 2 tables

  • Customers(PK Id , string Name )
  • Orders (PK Id , int Price , s开发者_Go百科tring Name , FK Customer_Id)

I Use the following code

public static void CreateScope(string userName)
{
var serverConn = new SqlConnection(@"Data Source=.\SQLEXPRESS; Initial Catalog=Test; Integrated Security=True");

var scopeDescription = new DbSyncScopeDescription(string.Format("Customer-{0}", userID));

var customersTable = SqlSyncDescriptionBuilder.GetDescriptionForTable("Customers", serverConn);
var ordersTable = SqlSyncDescriptionBuilder.GetDescriptionForTable("Orders", serverConn);

ordersTable.Constraints.Add("FK_Customer_Id", "Customers", "Orders", "Id", "Customer_Id");

scopeDesc.Tables.Add(azmanotTable);
scopeDesc.Tables.Add(customersTable);

var serverProvision = new SqlSyncScopeProvisioning(serverConn, scopeDesc);
serverProvision.SetCreateTableDefault(DbSyncCreationOption.Skip);

serverProvision.Tables["Customers"].AddFilterColumn("CustumerName");
serverProvision.Tables["Customers"].FilterClause = string.Format("[side].[CustumerName] = '{0}'", userName);

serverProvision.Apply();
}

During the Sync I do receive filtered "Customers" table but i also receive full orders table when i wanted only subset of this data , I mean only orders that belong to specific customer.

I have tried all the options i found in web for example to change insert order adding foreign key manually but still no success.

Thanks in Advance


i think you have your question answered here already: http://social.msdn.microsoft.com/Forums/en-US/syncdevdiscussions/thread/82235748-fac2-435f-8035-8d8809aeb82d

as mentioned, Sync Fx synchronizes tables individually/independently. To filter the orders table to synchronize only rows belonging to the synchronized customer rows, you have to filter the orders table as well :

serverProvision.Tables["Orders"].AddFilterColumn("CustomerId");
serverProvision.Tables["Customers"].FilterClause = string.Format("[side].[CustomerId] in (Select CustomerId from Customers_tracking where CustomerName = '{0}'", userName);
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜