DataRow drClient = e.Conflict.ClientChange.Rows[0];
DataRow drServeur = e.Conflict.ServerChange.Rows[0];
// Récupération du Prénom et du Nom à remplacer
string adresseFromClient = drClient["Adresse"] as string;
string adresseFromServeur = drServeur["Adresse"] as string;
// Récuparation de la table qui va être mise à jour coté serveur
DataTable serveurChanges = e.Context.DataSet.Tables[0];
// Puis la ligne
DataRow drToChange = serveurChanges.Select(
String.Format("ClientId = '{0}'", drClient["ClientId"].ToString()))[0];
// Mise à jour
if (adresseFromClient.Length > adresseFromServeur.Length)
{
// Ici le client gagne, on force l'application coté serveur
// Rien ne remontera coté client puisque l'enregistrement est déjà correct.
drToChange["Adresse"] = adresseFromClient;
e.Action = ApplyAction.RetryWithForceWrite;
}
else
// Dans ce cas, le serveur gagne, la ligne reviendra en état de modification coté client
e.Action = ApplyAction.Continue;
return;
/// <summary>
/// Nous mettons à jour les lignes pour générer des lignes à renvoyer coté client
/// </summary>
private void ServerChangesApplied(object sender, ChangesAppliedEventArgs e)
/// Stocke les id à mettre à jour (Exemple 2 Update-Update )
private List<Guid> lstClientIdToUpdate;
partial void OnInitialized()
this.ApplyChangeFailed += ServerApplyChangeFailed;
// Utile pour la résolution de conflit conditionnelle avec fusion des champs (Exemple 2 Update-Update )
this.ChangesApplied += ServerChangesApplied;
this.lstClientIdToUpdate = new List<Guid>();
String newAddress = string.Format("CONFLIT : Version client : {0} Version Serveur : {1} ",
adresseFromClient,
adresseFromServeur);
drToChange["Adresse"] = newAddress;
// Ajout de cette ligne à la liste des lignes à mettre à jour
this.lstClientIdToUpdate.Add((Guid)drClient["ClientId"]);
if (lstClientIdToUpdate.Count > 0)
foreach (Guid clientId in lstClientIdToUpdate)
SqlCommand updateTable = new SqlCommand();
updateTable.Connection = (SqlConnection)e.Connection;
updateTable.Transaction = (SqlTransaction)e.Transaction;
updateTable.CommandText = "UPDATE dbo.Client SET ClientId = @ClientId Where ClientId = @ClientId";
SqlParameter p = new SqlParameter("@ClientId", SqlDbType.UniqueIdentifier);
p.Value = clientId;
updateTable.Parameters.Add(p);
updateTable.ExecuteNonQuery();