Обычно я помещаю условие в объект спецификации, который реализует
bool IsVerfiedBy(T entity);
Таким образом, вы можете проверить состояние без исключения.
Если в вашем коде есть место, где спецификация должна быть проверена заранее, вы можете вызвать исключение, потому что это обязательное условие вашей функции.
Например, если ваша сущность должна находиться в определенном состоянии перед сохранением, сгенерируйте исключение, когда спецификация не проверена, но используйте спецификацию перед сохранением, чтобы исключение не произошло.