private static DbPropertyValues MergeValues(DbPropertyValues original, DbPropertyValues current, DbPropertyValues database) { var result = original.Clone(); foreach (var propertyName in original.PropertyNames) { if (original[propertyName] is DbPropertyValues) { var mergedComplexValues = MergeValues( (DbPropertyValues)original[propertyName], (DbPropertyValues)current[propertyName], (DbPropertyValues)database[propertyName]); ((DbPropertyValues)result[propertyName]) .SetValues(mergedComplexValues); } else { if (!object.Equals( current[propertyName], original[propertyName])) { result[propertyName] = current[propertyName]; } else if (!object.Equals( database[propertyName], original[propertyName])) { result[propertyName] = database[propertyName]; } } } return(result); }
private async static Task UserDealWithUpdates(string user, int delay, int starts) { using (var data = new Formula1Entities()) { int changes = 0; bool saveFailed = false; do { try { saveFailed = false; Racer r1 = data.Racers.Where(r => r.LastName == "Alonso").First(); r1.Starts = starts; await Task.Delay(delay); changes = data.SaveChanges(); } catch (DbUpdateConcurrencyException ex) { saveFailed = true; Console.WriteLine("{0} error {1}", user, ex.Message); foreach (var entry in ex.Entries) { DbPropertyValues currentValues = entry.CurrentValues; DbPropertyValues databaseValues = entry.GetDatabaseValues(); DbPropertyValues resolvedValues = databaseValues.Clone(); AskUser(currentValues, databaseValues, resolvedValues); entry.OriginalValues.SetValues(databaseValues); entry.CurrentValues.SetValues(resolvedValues); } } }while (saveFailed); Console.WriteLine("{0} changed {1} record(s)", user, changes); } }
public void Non_Generic_DbPropertyValues_uses_Clone_on_InternalPropertyValues() { var properties = new Dictionary<string, object> { { "Id", 1 } }; var values = new DbPropertyValues(new TestInternalPropertyValues<FakeTypeWithProps>(properties)); var clone = values.Clone(); Assert.Equal(1, clone["Id"]); }
public IDbPropertyValuesBase Clone() { return(_dbPropertyValues.Clone() as IDbPropertyValuesBase); }