public sealed override bool Delete4(Transaction transaction, ObjectReference @ref
                                            , object obj, int cascade, bool userCall)
        {
            int            id     = @ref.GetID();
            StatefulBuffer reader = ReadStatefulBufferById(transaction, id);

            if (reader != null)
            {
                if (obj != null)
                {
                    if ((!ShowInternalClasses()) && Const4.ClassInternal.IsAssignableFrom(obj.GetType
                                                                                              ()))
                    {
                        return(false);
                    }
                }
                reader.SetCascadeDeletes(cascade);
                transaction.IdSystem().NotifySlotDeleted(id, SlotChangeFactory.UserObjects);
                ClassMetadata classMetadata = @ref.ClassMetadata();
                classMetadata.Delete(reader, obj);
                return(true);
            }
            return(false);
        }