Пример #1
0
        private void InternalAcceptChanges(IChangeTrackable changeTrackable)
        {
            if (changeTrackable == null)
            {
                return;
            }

            var type = changeTrackable.GetType();

            foreach (var propertyManagerInfo in _propertyManager.GetInfos(type))
            {
                AcceptChangeableValue(propertyManagerInfo, changeTrackable);
            }

            var hashCode = changeTrackable.GetHashCode();

            if (IsNew(changeTrackable))
            {
                _repository.Add(changeTrackable);
                _newChangeables.Remove(hashCode);
            }
            else if (IsChanged(changeTrackable))
            {
                _repository.Update(changeTrackable);
                _changedChangeables.Remove(hashCode);
            }
        }
        private ChangedRelationShip <TKey> BuildChangeRelationshipTemplate(IChangeTrackable <TKey> parent, PropertyInfo propertyInfo)
        {
            OwnershipActions ownershipActions = null;
            var key = new Tuple <Type, PropertyInfo>(parent.GetType(), propertyInfo);

            _ownerMappings.TryGetValue(key, out ownershipActions);
            return(new ChangedRelationShip <TKey>(parent, propertyInfo, ownershipActions));
        }
Пример #3
0
        private void InternalRollback(IChangeTrackable changeTrackable)
        {
            if (ChangeableState(changeTrackable) != ChangeState.Changed)
            {
                return;
            }

            var type = changeTrackable.GetType();

            foreach (var keyValuePair in _changedChangeables[changeTrackable.GetHashCode()].AllChanges)
            {
                _propertyManager.GetInfo(type, keyValuePair.Key).SetValue(changeTrackable, RollbackValidObject(keyValuePair.Value.OldValue));
            }

            InternalAcceptChanges(changeTrackable);
        }