Ciao!
Io ho sempre usato code first, quindi il mio contesto è sempre stato un derivato di DbContext, ma credo sia uguale anche con le classi scritte da vs, visto che se non sbaglio da ef 5 con vs 2012 dovrebbe essere stato introdotto il DbContext come tipo di base di ef (ma non ne sono certo visto che non uso l'approccio creato da vs, mi scrivo direttamente le classi e le mappo). In ogni caso credo sia simile...
In sostanza il tuo contesto, prima di memorizzare i dati, li tiene nella lista local di ogni proprietà (di tipo DbSet<T>), queste proprietà contengono un lista "Local" (di tipo ObservableCollection<T>) dove vanno a finire tutte le entita (di tipo T) che hai aggiunto alle proprietà (DbSet<T>), ovviamente queste entità che hai aggiunto ma che ancora non hai salvato nel db avranno un ID inferiore a 1 (se hai utilizzato un int come primary key), quindi in ogni caso sarebbe facile controllare se tra di loro esiste un doppione.
se poi vuoi un consiglio ti direi di far derivare le tue classi "entità" (nella quale vuoi fare un controllo degli errori) dalla IValidatableObject implementando il metodo Validate, in questo modo se esegui l'override del ValidateEntity nella classe derivata dal tuo DbContext (quella che contiene le liste DbSet<T>), puoi ottenere il controllo degli errori chiamando il metodo DbContext.GetValidationErrors() in qualsiasi momento e ovunque usi il modello, inoltre volendo puoi agire direttamente nel Validate in modo che non venga neanche aggiunta una ipotetica entità errata.
Spero di aver capito bene ciò che vuoi ottenere...![]()