Beispiel #1
0
        private static int Save(PollingEntityDbContext context, int retries, Action <DbEntityEntry> resolver)
        {
            DbUpdateConcurrencyException exception;
            bool saveFailed;

            do
            {
                saveFailed = false;

                try
                {
                    return(context.SaveChanges());
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    exception  = ex;
                    saveFailed = true;

                    if (retries-- < 1)
                    {
                        throw exception;
                    }

                    var entries = ex.Entries.ToArray();

                    foreach (var entry in entries)
                    {
                        resolver(entry);
                    }
                }
            } while (saveFailed);

            throw exception;
        }
Beispiel #2
0
 public static int SaveChangesDatabaseWins(this PollingEntityDbContext context, int retries = 1)
 {
     return(Save(context, retries, (e) => e.Reload()));
 }
Beispiel #3
0
 public static int SaveChangesClientWins(this PollingEntityDbContext context, int retries = 1)
 {
     return(Save(context, retries, (e) => e.OriginalValues.SetValues(e.GetDatabaseValues())));
 }