Eu poderia facilmente estar errado, mas acho que depende da entidade com a qual você está trabalhando. Pegue algumas referências do núcleo, por exemplo:
\Magento\Eav\Model\Entity\Collection\AbstractCollection::delete()
public function delete()
{
foreach ($this->getItems() as $key => $item) {
$this->getEntity()->delete($item);
unset($this->_items[$key]);
}
return $this;
}
\Magento\Customer\Controller\Adminhtml\Index\MassDelete::massAction()
:
protected function massAction(AbstractCollection $collection)
{
$customersDeleted = 0;
foreach ($collection->getAllIds() as $customerId) {
$this->customerRepository->deleteById($customerId);
$customersDeleted++;
}
//snip...
}
\Magento\Catalog\Controller\Adminhtml\Product\MassDelete::execute()
public function execute()
{
$collection = $this->filter->getCollection($this->collectionFactory->create());
$productDeleted = 0;
foreach ($collection->getItems() as $product) {
$product->delete();
$productDeleted++;
}
$this->messageManager->addSuccess(
__('A total of %1 record(s) have been deleted.', $productDeleted)
);
return $this->resultFactory->create(ResultFactory::TYPE_REDIRECT)->setPath('catalog/*/index');
}
Tudo se resume a se há uma camada de serviço configurada para a entidade.