/// <summary>
        /// Update the model but keeps the privaty/audit fields from being updated.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        /// <param name="update"></param>
        public static void DoUpdateModel <T>(this IEntity entity, Action <T> update)
        {
            if (entity == null)
            {
                return;
            }

            // 1. Get the original values.
            int              id           = entity.Id;
            DateTime         createDate   = entity.CreateDate;
            DateTime         updateDate   = entity.UpdateDate;
            string           createUser   = entity.CreateUser;
            string           updateUser   = entity.UpdateUser;
            string           comment      = entity.UpdateComment;
            int              version      = 0;
            int              versionRefId = 0;
            bool             hasVersion   = entity is IEntityVersioned;
            IEntityVersioned versioned    = null;

            if (hasVersion)
            {
                versioned    = entity as IEntityVersioned;
                version      = versioned.Version;
                versionRefId = versioned.VersionRefId;
            }

            // 2. Update model from the form values.
            update((T)entity);

            // 3. Now apply the values back
            entity.Id            = id;
            entity.CreateUser    = createUser;
            entity.UpdateUser    = updateUser;
            entity.CreateDate    = createDate;
            entity.UpdateDate    = updateDate;
            entity.UpdateComment = comment;
            if (hasVersion)
            {
                versioned.Version      = version;
                versioned.VersionRefId = versionRefId;
            }
        }
        /// <summary>
        /// Update the model but keeps the privaty/audit fields from being updated.
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="entity"></param>
        /// <param name="original"></param>
        public static void DoUpdateModel <T>(this IEntity entity, IEntity original)
        {
            if (entity == null || original == null)
            {
                return;
            }
            entity.CreateUser    = original.CreateUser;
            entity.CreateDate    = original.CreateDate;
            entity.UpdateComment = entity.UpdateComment;
            entity.UpdateDate    = entity.UpdateDate;
            entity.UpdateUser    = entity.UpdateUser;

            if (entity is IEntityVersioned && original is IEntityVersioned)
            {
                IEntityVersioned newVEntity  = entity as IEntityVersioned;
                IEntityVersioned origVEntity = original as IEntityVersioned;
                newVEntity.Version      = origVEntity.Version;
                newVEntity.VersionRefId = origVEntity.VersionRefId;
            }
        }