0

Quelqu'un peut-il me diriger dans la bonne direction pour gérer une erreur de conflit PK dans C# .net en utilisant Sync Framework. J'essaie de synchroniser entre sql server 2008 et la base de données locale de cache de données (.sdf) et voudrait garder les deux lignes qui sont contradictoires dans le serveur et le client et ne permettez pas au serveur ou au client de gagner?SQL Server 2008 Sync - Comment réinsérer des lignes pk en conflit avec la nouvelle clé primaire

Je reçois une erreur de conflit pk lorsque j'insère une nouvelle ligne dans le serveur et le client qui ont le même ID PK.

Toutes les suggestions seraient reconnaissants.

Merci

+0

À quel point êtes-vous proche d'une solution de travail? Avez-vous envisagé d'utiliser Microsoft Sync Framework? Cela a un bon système de résolution des conflits. – u07ch

+0

J'utilise Sync Framework mais pour un conflit PK (ClientInsertServerInsert) il n'y a pas d'options à spécifier pour accepter les deux lignes dans les deux tables (pour autant que je sache). – Belliez

+0

Lorsque vous avez un conflit bilatéral, vous devez soit écrire un journal pour la réconciliation; ou modifiez la clé avec une force d'écriture – u07ch

Répondre

0

Ceci est résolu en utilisant un GUID pour le PK au lieu d'un int auto-incrémentant.

Cela garantit que chaque ligne insérée par le serveur ou un client sera unique et fonctionne très bien. Il y a quelques inconvénients tels que l'espace de stockage supplémentaire et le temps qu'il faut pour chercher etc mais c'est quelque chose que je suis prêt à vivre (et je vais filtrer les données que le client obtient qui aidera à améliorer les performances).

Merci à tous pour votre aide.

0

Principe général pour ce type de problème est d'avoir une colonne pour une clé naturelle. L'idée est que la clé primaire identifie de manière unique une ligne dans une table, tandis que la clé naturelle identifie de manière unique un objet décrit par la ligne. En cas de conflit, laissez le serveur gagner et insérez une nouvelle ligne du côté client. Un nouveau PK sera émis, mais la clé naturelle reste la même. Plus tard, il est facile de trouver ces rangées en commandant par la clé naturelle.

Questions connexes