public CollectionValueProvider(CloneChangesHelper resolver,
                                MemberInfo member,
                                IValueProvider valueProvider)
 {
     _resolver      = resolver;
     _member        = member;
     _valueProvider = valueProvider;
 }
        /// <summary>
        /// Get entities that have been added, modified or deleted, including child
        /// collections with entities that have been added, modified or deleted.
        /// </summary>
        /// <returns>Collection containing only changed entities</returns>
        public ChangeTrackingCollection <TEntity> GetChanges()
        {
            // Temporarily restore deletes
            this.RestoreDeletes();

            try
            {
                return(CloneChangesHelper.GetChanges(this));
            }
            finally
            {
                // Remove deletes
                this.RemoveRestoredDeletes();
            }
        }
            public static ChangeTrackingCollection <TEntity> GetChanges(ChangeTrackingCollection <TEntity> source)
            {
                var helper  = new CloneChangesHelper();
                var wrapper = new Wrapper()
                {
                    Result = source
                };

                // Inspect the graph and collect entityChangedInfos
                helper.GetChanges(Enumerable.Repeat(wrapper, 1)).ToList();

                // Clone only changed items
                var clone = TrackableExtensions.CloneObject(wrapper, helper);

                return(clone.Result);
            }