/// <summary> /// Scan for exists ObjectChange for this deferredObject and append this PropertyChange into /// </summary> /// <param name="deferredObjectChange"></param> /// <param name="propertyName"></param> /// <param name="deferredValue"></param> private void record(DeferredObjectChange <TPrincipal> deferredObjectChange, string propertyName, Func <object> deferredValue) { var deferredValues = deferredObjectChange.FutureValues; var propertyChange = getOrCreateNewPropertyChangeFor(deferredObjectChange.ObjectChange, propertyName); if (deferredValue != null) { deferredValues.Store(propertyName, deferredValue); } }
private DeferredObjectChange <TPrincipal> getOrCreateNewDeferredObjectChangeFor(TChangeSet set, object entity, string typeName, Func <string> deferredReference) { var deferredObjectChange = deferredObjectChanges.SingleOrDefault(doc => ReferenceEquals(doc.Key, entity)).Value; if (deferredObjectChange != null) { return(deferredObjectChange); } var result = factory.ObjectChange(); result.TypeName = typeName; result.ObjectReference = null; result.ChangeSet = set; set.Add(result); deferredObjectChange = new DeferredObjectChange <TPrincipal>(result, deferredReference, serializer); deferredObjectChanges.Add(entity, deferredObjectChange); return(deferredObjectChange); }