Ninguno de los ejemplos que he examinado para los patrones de repositorio incluye ningún tipo de manejo de errores. ¿Por qué es esto? Digamos, por ejemplo, tengo esto:Try Catch in Repository
public virtual TItem Insert<TItem>(TItem item) where TItem:class,new()
{
dbContext.Set<TItem>().Add(item);
try
{
dbContext.SaveChanges();
}
catch (DbUpdateException)
{
return null;
}
return item;
}
Una instancia en la que infringimos una restricción. Capturo la DbUpdateException ... ¿Dónde manejaría este error en vivo si no está en el repositorio mismo?
No tengo ningún problema con que arroje la excepción DbUpdate, es más limpio que el NullRefrence, estoy de acuerdo. De vuelta en el día del procedimiento sotrado que usaríamos si no existiera. Obviamente tengo constaints en el modelo de datos. Entonces, ¿cómo hacer que una entidad sea lo suficientemente inteligente como para buscar un registro antes de hacer una inserción? –
Un enfoque sería utilizar algún tipo de Validator antes de hacer la inserción para verificar las restricciones, de modo que pueda proporcionar mensajes de error amistosos. O podría atrapar las excepciones de restricción lanzadas por la base de datos en lo que sea que consuma el repositorio. De cualquier manera, no creo que sea el trabajo del repositorio averiguar si se puede insertar o no un registro. – rsbarro
Acepto, cruzaré ese puente cuando termine el código del repositorio y realmente conecte un DI para el consumidor. –