Besides being a very opinion based question, I think there are appropriate guidelines one can follow.
Would you generally check in the database for a existing record before adding one, or would you rely on the exception being throw or even expect that the parameters given are relevant and active.
This completely depends on context in my opinion.
For extremely high transactions, I would write a stored procedure.
Otherwise it depends on the concurrency of the operation, and in this particular instance, I don't think multiple people are going to try to add the same person to the same role, so exceptions are minimized and acceptable.