Я реализую структуру синхронизации в моем приложении Windows C#.microsoft sync framework Нарушение внешнего ключа
У меня есть пользователи таблицы, действия таблицы и таблица userActions, которая имеет внешний ключ для обеих таблиц.
Когда я определяю свою сферу в предоставления, порядок родитель, то ребенок:
DbSyncScopeDescription scopeDesc = .....
DbSyncTableDescription users =
SqlSyncDescriptionBuilder.GetDescriptionForTable("Users", new SqlConnection(ServerConnection));
DbSyncTableDescription userActions =
SqlSyncDescriptionBuilder.GetDescriptionForTable("UserActions", new SqlConnection(ServerConnection));
userActions.Constraints.Add(new DbSyncForeignKeyConstraint("FK_UserActions_Users"));
userActions.Constraints.Add(new DbSyncForeignKeyConstraint("FK_UserActions_Actions"));
scopeDesc.Tables.Add(users);
scopeDesc.Tables.Add(userActions);
Моя синхронизация должна произойти, когда пользователю присваивается определенное действие.
Так что, если я создаю пользователя 1 с действием x, пользователь синхронизируется. Если я создам пользователя 2 без действия x, он не будет синхронизирован. Все идет нормально.
Если теперь я назначаю действие x пользователю 2 и повторно применяю синхронизацию, пользователь 2 все еще не синхронизируется. то, что я заметил, что в моем случае «ApplyChangeFailed», я получаю ключ исключение иностранного нарушения:
Local Provider применяются изменения не удалось: Заявление ВСТАВИТЬ конфликтные с ограничением внешнего ключа «FK_UserActions_Users». Конфликт произошел в базе данных «LocalGenUM», таблице «dbo.Users», в столбце «Id».
Я застрял с этим в течение нескольких недель. Может ли кто-нибудь помочь?
Вы говорите, что только действие x будет обнаружено как измененное, потому что это строка, которая была изменена, а не пользователь 2. Но даже если я попытаюсь внести изменения в оба, синхронизация не будет работать. Какие флаги меняют строку? – Nidal