Delete entities on the database can be limited by adding predicates, which work on the same table, for concurrency control for example.
Denying a delete, can be implemented by you by overriding Delete in the derived entity class in the 2-class scenario in selfservicing (do your actions there) or in a derived class of DataAccessAdapter and you override DeleteEntity() there, doing your checks there.
Keep in mind that business rules spanning multiple entities (which this is) can better be implemented in a management class so you know where the rules are located. By using Adapter for example, you can pass an entity for deletion to that class, and that class does checking first, and denies the delete if a rule fails or proceeds if the rule succeeds.