示例#1
0
        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);
        }
示例#2
0
        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"]);
        }
示例#4
0
 public IDbPropertyValuesBase Clone()
 {
     return(_dbPropertyValues.Clone() as IDbPropertyValuesBase);
 }