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)); }
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); }