Microsoft Sync - не переносит внешние ключи - PullRequest
0 голосов
/ 06 апреля 2011

Я использую Microsoft Sync Frameowrk, и он переносит мои таблицы, но не вытягивает чужие ключи? Я позаботился о том, чтобы родитель (таблица PK) был перенесен первым, так как я предположил, что это приведет к отказу FK.

Что мне здесь не хватает, что не позволяет приводить FK с синхронизацией?

Использование SQL Server 2008 R2 и SQL Server 2008 R2 Express. Я полагаю, что использую Sync 2.1 Framework.

Любые предложения будут с благодарностью.

Спасибо

S

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

Sync Fx не предоставляет FK и другие ограничения, кроме PK.Вы должны будете написать свои FK и применить их программно.

0 голосов
/ 21 июля 2011

ServerSyncProvider создает DataSet, который ClientSyncProvider использует для заполнения таблиц в базе данных клиента. Функциональные возможности, предоставляемые по умолчанию (как вы упоминаете), не включают в себя ограничения внешнего ключа. (Я не знаю, почему ... кажется, что это имеет смысл)

Вероятно, проще всего переопределить метод GetSchema ServerSyncProvider следующим образом:

public override SyncSchema GetSchema(Collection<string> tableNames,SyncSession syncSession)
{
  var schema = base.GetSchema(tableNames,syncSession);
  schema.SchemaDataSet.Tables["Table1"].Constraints.Add(new ForeignKeyConstraint(...));
  return schema;
}

ClientSyncProvider будет создавать сценарии для внешних ключей на основе того, что он находит в наборе данных

Конечно, вы, вероятно, захотите программно извлечь внешние ключи из вашей базы данных, как в http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table-in-database/

...