public virtual bool UpdateWithIncludeOrExcludeProperties(IHasRowVersion source, T destination, bool include, ICollection <string> propertyNames)
        {
            var destinationEntry = ctx.Entry(destination);

            destinationEntry.Property(e => e.RowVersion).OriginalValue = source.RowVersion;

            var sourceProperties = source.GetProperties();

            foreach (var property in sourceProperties)
            {
                string propertyName = property.Name;

                bool contains = propertyNames.Contains(propertyName);

                if ((contains && include) || (!contains && !include))
                {
                    var sourceValue = property.GetPropertyValue(source);

                    destination.SetPropertyValue(propertyName, sourceValue);
                }
            }

            return(true);
        }