Delete ContentItem does not delete Part Record

Topics: Customizing Orchard, Writing modules
Mar 27, 2012 at 3:34 PM

I notice when i delete a content item using

_contentManager.Remove(contentItem)

it does not delete the existing record of whatever parts attached to this content item. For example, the AutoroutePartRecord and TitlePartRecord.

Is there any reason to keep these records? If not i guess i'll need to delete those manually from repository.

Coordinator
Mar 27, 2012 at 7:02 PM

That's the design: we only do soft deletes.

Developer
Mar 27, 2012 at 8:30 PM

If you do want to delete the content part when a content item is being removed, you can write a content handler that overrides the Remove method. From within that method, you could easily remove the part record.

Example:

 

public class MyPartHandler:ContentHandler
    {
        private readonly IRepository<MyPartRecord> _repository;

        public MyPartHandler(IRepository<MyPartRecord> repository ) {
            _repository = repository;
        }

        protected override void Removed(RemoveContentContext context)
        {
            var myPart = context.ContentItem.As<MyPart>();

            if(myPart != null)
                _repository.Delete(myPart.Record);
        }
    }

 

Mar 28, 2012 at 5:46 AM

thanks! It was giving me problems because one of the column is unique. If the existing record is not deleted, i cant create another new record with the same value.