Raven.Bundles.CascadeDelete.CascadeDeleteTrigger.OnDelete C# (CSharp) Method

OnDelete() public method

public OnDelete ( string key, Raven.Abstractions.Data.TransactionInformation transactionInformation ) : void
key string
transactionInformation Raven.Abstractions.Data.TransactionInformation
return void
		public override void OnDelete(string key, TransactionInformation transactionInformation)
		{
			if (CascadeDeleteContext.IsInCascadeDeleteContext)
				return;

			var document = Database.Get(key, transactionInformation);
			if (document == null)
				return;

			using (CascadeDeleteContext.Enter())
			{
				var documentsToDelete = document.Metadata.Value<RavenJArray>(MetadataKeys.DocumentsToCascadeDelete);

				if (documentsToDelete != null)
				{
					foreach (var documentToDelete in documentsToDelete)
					{
						var documentId = documentToDelete.Value<string>();
						if (!CascadeDeleteContext.HasAlreadyDeletedDocument(documentId))
						{
							CascadeDeleteContext.AddDeletedDocument(documentId);
							Database.Delete(documentId, null, transactionInformation);
						}
					}
				}

				var attachmentsToDelete = document.Metadata.Value<RavenJArray>(MetadataKeys.AttachmentsToCascadeDelete);

				if (attachmentsToDelete != null)
					foreach (var attachmentToDelete in attachmentsToDelete)
						Database.DeleteStatic(attachmentToDelete.Value<string>(), null);
			}
		}
	}
CascadeDeleteTrigger