/// <summary> /// Overwrites the <paramref name="originalSet"/> entity with the changes tracked by this Delta resource set. /// </summary> /// <param name="originalSet">The original set.</param> public virtual void Patch(IEnumerable <T> originalSet) { if (originalSet == null) { throw Error.ArgumentNull(nameof(originalSet)); } // TODO: work out the patch process foreach (IDeltaItem delta in this) { T originalObj = GetOriginal(delta, originalSet); switch (delta.Kind) { case DeltaKind.DeltaResource: // A Delta resource is a delta IDelta deltaResource = (IDelta)delta; break; case DeltaKind.DeltaDeletedResource: // A Delta deleted resource is a delta deleted resource IDeltaDeletedResource deltaDeletedResource = (IDeltaDeletedResource)delta; break; case DeltaKind.DeltaDeletedLink: IDeltaDeletedLink deltaDeletedLink = (IDeltaDeletedLink)delta; break; case DeltaKind.DeltaLink: IDeltaLink deltaLink = (IDeltaLink)delta; break; case DeltaKind.Unknown: default: //throw Error.InvalidOperation(SRResources.CannotSetDynamicPropertyDictionary, propertyInfo.Name, // entity.GetType().FullName); throw Error.InvalidOperation("Unknow delta kind"); } } }
/// <summary> /// Overwrites the <paramref name="originalSet"/> entity with the changes tracked by this Delta resource set. /// </summary> /// <remarks> /// TODO: this functionality hasn't finished yet. We'd like to get more feedback about how to /// patch the deltaset to the original data source. /// </remarks> /// <param name="originalSet">The original set.</param> internal void Patch(IEnumerable originalSet) { if (originalSet == null) { throw Error.ArgumentNull(nameof(originalSet)); } // TODO: work out the patch process foreach (IDeltaSetItem delta in this) { T originalObj = GetOriginal(delta, originalSet); switch (delta) { case IDelta deltaResource: IDeltaDeletedResource deltaDeleteResource = delta as IDeltaDeletedResource; if (deltaDeleteResource != null) { // TODO: it's a delta deleted resource } else { // TODO: it's a normal (added, updated) resource } break; case IDeltaDeletedLink deltaDeletedLink: // TODO: a delta deleted link break; case IDeltaLink deltaLink: // TODO: a delta added link break; default: throw Error.InvalidOperation($"Unknow delta type {delta.GetType()}"); } } }