Синхронизация относительных таблиц в Sync Framework 2.1 - PullRequest
1 голос
/ 28 мая 2011

Я пытаюсь синхронизировать Sql Express 2008 с Sql Compact 3.5 с помощью Sync Framework 2.1

У меня есть 2 таблицы

  • Клиенты (PK Id, имя строки)
  • Orders (PK Id, int Price, строка Имя, ФК Customer_Id)

Я использую следующий код

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();
}

Во время синхронизации я получаю отфильтрованную таблицу «Клиенты» , но я также получаю таблицу полных заказов, когда мне требуется только подмножество этих данных, я имею в виду только заказы, которые принадлежат конкретному клиенту.

Я перепробовал все варианты, которые я нашел в Интернете, например, чтобы изменить порядок вставки, добавив внешний ключ вручную, но все еще безуспешно.

Заранее спасибо

1 Ответ

0 голосов
/ 28 мая 2011

я думаю, что вы уже ответили на свой вопрос: http://social.msdn.microsoft.com/Forums/en-US/syncdevdiscussions/thread/82235748-fac2-435f-8035-8d8809aeb82d

, как уже упоминалось, Sync Fx синхронизирует таблицы индивидуально / независимо.Чтобы отфильтровать таблицу заказов для синхронизации только строк, принадлежащих синхронизированным строкам клиентов, необходимо также отфильтровать таблицу заказов:

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