Au cas où quelqu'un serait intéressé par une solution à un problème similaire - on peut prendre le contrôle de la transaction utilisée lors de la synchronisation en attachant à certains événements du fournisseur de synchronisation:
private void DbCacheServerSyncProvider_ApplyingChanges(object sender, ApplyingChangesEventArgs e)
{
if (e.Transaction == null)
{
e.Transaction = e.Connection.BeginTransaction(IsolationLevel.ReadCommitted);
DisableConstraints(e.Connection, e.Transaction);
}
}
private void DbCacheServerSyncProvider_ChangesApplied(object sender, ChangesAppliedEventArgs e)
{
if (e.Transaction != null)
{
EnableConstraints(e.Connection, e.Transaction);
e.Transaction.Commit();
e.Transaction.Dispose();
}
}
private void DbCacheServerSyncProvider_ApplyChangeFailed(object sender, ApplyChangeFailedEventArgs e)
{
if (e.Transaction != null)
{
e.Transaction.Rollback();
e.Transaction.Dispose();
}
throw new InternalException("Server-side conflict has occurred during synchronization. Conflict details:\r\n" + SyncUtils.CreateChangeFailedDetails(e).Trim('\r', '\n'));
}
J'ai mis à jour la question . –