internal void Delete3(Transaction trans, ObjectReference @ref, object obj, int cascade , bool userCall) { // The passed reference can be null, when calling from Transaction. if (@ref == null || [email protected]()) { return; } // This check is performed twice, here and in delete2, intentionally. if (BreakDeleteForEnum(@ref, userCall)) { @ref.EndProcessing(); return; } if ([email protected]()) { @ref.EndProcessing(); return; } ClassMetadata yc = @ref.ClassMetadata(); // We have to end processing temporarily here, otherwise the can delete callback // can't do anything at all with this object. @ref.EndProcessing(); ActivateForDeletionCallback(trans, yc, @ref, obj); if (!ObjectCanDelete(trans, yc, @ref)) { return; } @ref.BeginProcessing(); if (DTrace.enabled) { DTrace.Delete.Log(@ref.GetID()); } if (Delete4(trans, @ref, obj, cascade, userCall)) { ObjectOnDelete(trans, yc, @ref); if (ConfigImpl.MessageLevel() > Const4.State) { Message(string.Empty + @ref.GetID() + " delete " + @ref.ClassMetadata().GetName() ); } } @ref.EndProcessing(); }