/// <summary> /// Deletes an <see cref="IDataType"/> /// </summary> /// <remarks> /// Please note that deleting a <see cref="IDataType"/> will remove /// all the <see cref="IPropertyType"/> data that references this <see cref="IDataType"/>. /// </remarks> /// <param name="dataType"><see cref="IDataType"/> to delete</param> /// <param name="userId">Optional Id of the user issuing the deletion</param> public void Delete(IDataType dataType, int userId = Cms.Core.Constants.Security.SuperUserId) { var evtMsgs = EventMessagesFactory.Get(); using (var scope = ScopeProvider.CreateCoreScope()) { var deletingDataTypeNotification = new DataTypeDeletingNotification(dataType, evtMsgs); if (scope.Notifications.PublishCancelable(deletingDataTypeNotification)) { scope.Complete(); return; } // find ContentTypes using this IDataTypeDefinition on a PropertyType, and delete // TODO: media and members?! // TODO: non-group properties?! var query = Query <PropertyType>().Where(x => x.DataTypeId == dataType.Id); var contentTypes = _contentTypeRepository.GetByQuery(query); foreach (var contentType in contentTypes) { foreach (var propertyGroup in contentType.PropertyGroups) { var types = propertyGroup.PropertyTypes?.Where(x => x.DataTypeId == dataType.Id).ToList(); if (types is not null) { foreach (var propertyType in types) { propertyGroup.PropertyTypes?.Remove(propertyType); } } } // so... we are modifying content types here. the service will trigger Deleted event, // which will propagate to DataTypeCacheRefresher which will clear almost every cache // there is to clear... and in addition published snapshot caches will clear themselves too, so // this is probably safe although it looks... weird. // // what IS weird is that a content type is losing a property and we do NOT raise any // content type event... so ppl better listen on the data type events too. _contentTypeRepository.Save(contentType); } _dataTypeRepository.Delete(dataType); scope.Notifications.Publish(new DataTypeDeletedNotification(dataType, evtMsgs).WithStateFrom(deletingDataTypeNotification)); Audit(AuditType.Delete, userId, dataType.Id); scope.Complete(); } }
/// <summary> /// 删除数据 /// </summary> public async Task Delete(string id) { try { await _IDataTypeRepository.DeleteAsync(id); _IDataTypeRepository.Delete(q => q.ParentID == id); } catch (Exception ex) { throw new Exception(ex.Message); } }
/// <summary> /// Deletes an <see cref="IDataType"/> /// </summary> /// <remarks> /// Please note that deleting a <see cref="IDataType"/> will remove /// all the <see cref="PropertyType"/> data that references this <see cref="IDataType"/>. /// </remarks> /// <param name="dataType"><see cref="IDataType"/> to delete</param> /// <param name="userId">Optional Id of the user issueing the deletion</param> public void Delete(IDataType dataType, int userId = 0) { using (var scope = ScopeProvider.CreateScope()) { var deleteEventArgs = new DeleteEventArgs <IDataType>(dataType); if (scope.Events.DispatchCancelable(Deleting, this, deleteEventArgs)) { scope.Complete(); return; } // find ContentTypes using this IDataTypeDefinition on a PropertyType, and delete // fixme - media and members?! // fixme - non-group properties?! var query = Query <PropertyType>().Where(x => x.DataTypeId == dataType.Id); var contentTypes = _contentTypeRepository.GetByQuery(query); foreach (var contentType in contentTypes) { foreach (var propertyGroup in contentType.PropertyGroups) { var types = propertyGroup.PropertyTypes.Where(x => x.DataTypeId == dataType.Id).ToList(); foreach (var propertyType in types) { propertyGroup.PropertyTypes.Remove(propertyType); } } // so... we are modifying content types here. the service will trigger Deleted event, // which will propagate to DataTypeCacheRefresher which will clear almost every cache // there is to clear... and in addition published snapshot caches will clear themselves too, so // this is probably safe alghough it looks... weird. // // what IS weird is that a content type is losing a property and we do NOT raise any // content type event... so ppl better listen on the data type events too. _contentTypeRepository.Save(contentType); } _dataTypeRepository.Delete(dataType); deleteEventArgs.CanCancel = false; scope.Events.Dispatch(Deleted, this, deleteEventArgs); Audit(AuditType.Delete, userId, dataType.Id); scope.Complete(); } }