/// <summary>
        /// Verify that all update operations in the specified <see cref="EntityChangeSet"/> are permitted.
        /// </summary>
        /// <param name="changeSet">The <see cref="EntityChangeSet"/> to check.</param>
        internal static void CheckForInvalidUpdates(EntityChangeSet changeSet)
        {
            AssociationUpdateChecker associationChecker = new AssociationUpdateChecker();

            foreach (Entity entity in changeSet)
            {
                if (entity.EntityState == EntityState.Modified)
                {
                    foreach (MetaMember member in entity.ModifiedProperties)
                    {
                        if (member.IsKeyMember)
                        {
                            throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Resource.Entity_KeyMembersCannotBeChanged, member.Name, entity.GetType().Name));
                        }
                    }
                }

                // search associated entities for any invalid changes
                associationChecker.Visit(entity);
            }
        }
        /// <summary>
        /// Verify that all update operations in the specified <see cref="EntityChangeSet"/> are permitted.
        /// </summary>
        /// <param name="changeSet">The <see cref="EntityChangeSet"/> to check.</param>
        internal static void CheckForInvalidUpdates(EntityChangeSet changeSet)
        {
            AssociationUpdateChecker associationChecker = new AssociationUpdateChecker();

            foreach (Entity entity in changeSet)
            {
                if (entity.EntityState == EntityState.Modified)
                {
                    foreach (PropertyInfo modifiedProperty in entity.ModifiedProperties)
                    {
                        if (modifiedProperty.GetCustomAttributes(typeof(KeyAttribute), false).Any())
                        {
                            throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, Resource.Entity_KeyMembersCannotBeChanged, modifiedProperty.Name, entity.GetType().Name));
                        }
                    }
                }

                // search associated entities for any invalid changes
                associationChecker.Visit(entity);
            }
        }