Пример #1
0
        protected void SafelyExecuteChanges(IEnumerable <DbChange> changes)
        {
            var successChanges = new Stack <DbChange>();

            try
            {
                foreach (var change in changes)
                {
                    Console.WriteLine("-----------------");
                    Console.WriteLine(change.Forward);
                    Database.ExecuteSqlCommand(change.Forward);
                    successChanges.Push(change);
                }
                Changes.AddRange(changes);
            }catch (Exception ex)
            {
                try{
                    while (successChanges.Count > 0)
                    {
                        var rollback = successChanges.Pop();
                        Database.ExecuteSqlCommand(rollback.Backward);
                    }
                }catch (Exception rollbackEx) {
                    throw new AggregateException("Failed while running upgrade, then failed rolling back!", new [] { ex, rollbackEx });
                }
                throw;
            }
        }
Пример #2
0
        private void AddAndExecute(params StateChange[] changes)
        {
            Changes.AddRange(changes);

            foreach (var change in changes)
            {
                change.ExecuteQuery(this);
            }

            Provider.State.ApplyChanges(changes, this);
        }
Пример #3
0
        private void AddAndExecute(params StateChange[] changes)
        {
            Changes.AddRange(changes);

            var commands = changes.Select(x => DatabaseProvider.ToDbCommand(GetQuery(x)));

            foreach (var command in commands)
            {
                DatabaseTransaction.ExecuteNonQuery(command);
            }
        }
Пример #4
0
        public VersionedList <T> AddRange(IEnumerable <T> items)
        {
            var itemsToAdd = items.ToArray();
            var changes    = Enumerable.Range(0, itemsToAdd.Length)
                             .Select(i => ListChange.Added(Version + i, Items.Count + i, itemsToAdd[i]));

            return(new VersionedList <T>(
                       Items.AddRange(items),
                       Version + itemsToAdd.Length,
                       Changes.AddRange(changes)
                       ));
        }
Пример #5
0
        public void SaveObservedChanges(IBrowsableDataObject plainObject)
        {
            foreach (var change in Changes)
            {
                TcOpen.Inxton.TcoAppDomain.Current.Logger.Information($"User '{change.UserName}' changed value of '{change.ValueTag.Symbol}' from '{change.OldValue}' to '{change.NewValue}' {{@payload}}", change);
            }

            if (DataObject.Changes == null)
            {
                DataObject.Changes = new List <ValueChangeItem>();
            }

            Changes.AddRange(DataObject.Changes);
            ((IPlainTcoEntity)plainObject).Changes.AddRange(Changes);

            Changes = new List <ValueChangeItem>();
        }
Пример #6
0
        private VersionedList <T> _removeWhere(Func <T, int, bool> predicate)
        {
            var pairs = Items
                        .Select((T item, int i) => new { Index = i, Item = item })
                        .ToArray();

            var pairsToRemove = pairs
                                .Where(pair => predicate(pair.Item, pair.Index))
                                .OrderByDescending(pair => pair.Index)
                                .ToArray();

            var remaining = pairs
                            .Where(pair => !predicate(pair.Item, pair.Index))
                            .Select(pair => pair.Item);

            var changes = Enumerable.Range(0, pairsToRemove.Length)
                          .Select(i => ListChange.Removed(Version + i, pairsToRemove[i].Index, pairsToRemove[i].Item));

            return(new VersionedList <T>(
                       ImmutableList.CreateRange(remaining),
                       Version + pairsToRemove.Length,
                       Changes.AddRange(changes)
                       ));
        }
Пример #7
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="description">Description</param>
 /// <param name="changes">Changes</param>
 public PatchConfig(string description, PatchChange[] changes) : this()
 {
     Description = description;
     Changes.AddRange(changes);
 }
Пример #8
0
        public VersionedList <T> Reverse(int index, int count)
        {
            var start  = index;
            var finish = index + count - 1;

            var moves = Enumerable.Range(0, count)
                        .Select(i => ListChange.Moved(Version + i, start, finish - i, Items[start + i]));

            return(new VersionedList <T>(Items.Reverse(index, count), Version + count, Changes.AddRange(moves)));
        }
Пример #9
0
 public void AddChangesRange(IEnumerable <ChessBoxChange> changes)
 {
     Changes.AddRange(changes);
 }