Dove eseguire un controllo duplicato per un’ quadro

Sto cercando consigli sul “miglior” posto dove mettere la logica di validazione, come un controllo duplicato per un’ quadro, quando si utilizza Entity Framework Code-First, in un’applicazione MVC.

Per usare un semplice esempio:

public class JobRole { public int Id { get; set; } public string Name { get; set; } } 

La regola è che il campo “Nome” deve essere univoco.

Quando aggiungo un nuovo JobRole, è facile eseguire un controllo nel Job Role Repository che il nome non esiste già.

Ma se un utente modifica un JobRole esistente e imposta accidentalmente il Nome su uno già esistente, come posso verificarlo?

Il problema è che non è necessario un metodo di “aggiornamento” sul repository, poiché l’ quadro del ruolo lavoro rileverà automaticamente le modifiche, quindi non c’è un luogo logico per eseguire questo controllo prima di tentare di salvare.

Ho preso in considerazione due opzioni finora:

  1. Eseguire l’override del metodo ValidateEntry su DbContext e, quindi, quando l’entity framework JobRole viene salvata con EntityState.Modified, eseguire quindi il controllo duplicato.
  2. Crea una sorta di servizio di verifica dei duplicati, chiamato dal controller, prima di tentare un salvataggio.

Nessuno dei due sembra davvero ideale. L’uso di ValidateEntry sembra piuttosto tardivo (poco prima del salvataggio) e difficile da testare. L’utilizzo di un servizio lascia la possibilità che qualcuno dimentichi di chiamarlo da un controller, lasciando passare i dati duplicati.

C’è un modo migliore?