public override bool DeleteItem(ItemDefinition itemDefinition, CallContext context) { #if DEBUG var timer = Stopwatch.StartNew(); #endif // check if already deleted in head var headParentId = HeadProvider.GetParentID(itemDefinition, context); if (headParentId == ID.Undefined) { #if DEBUG this.Trace(true, timer, itemDefinition.ID, context); #endif return(true); } var itemId = itemDefinition.ID; if (ReadOnlyProviders.FirstNotNull(x => x.GetItemDefinition(itemId)) == null) { // item may only exist in head provider // so we can simply delete it var deleted = HeadProvider.DeleteItem(itemDefinition, context); #if DEBUG this.Trace(deleted, timer, itemDefinition.ID, context); #endif return(deleted); } if (HeadProvider.GetItemDefinition(itemId, context) != null) { // item exists both in read-only data provider and in HEAD // so we first delete it in HEAD HeadProvider.DeleteItem(itemDefinition, context); // and pretend it was only in read-only data provider } // item only exists in read-only data provider // so we create item definition beneath undefied parent var deleted2 = CreateItem(itemId, itemDefinition.Name, itemDefinition.TemplateID, new ItemDefinition(ID.Undefined, "undefined", ID.Null, ID.Null), context); #if DEBUG this.Trace(deleted2, timer, itemDefinition.ID, context); #endif return(deleted2); }