Estoy usando el siguiente código en uno de mis proyectos:
using (var _context = new DBContext(new DbContextOptions<DBContext>()))
{
try
{
_context.MyItems.Remove(new MyItem() { MyItemId = id });
await _context.SaveChangesAsync();
}
catch (Exception ex)
{
if (!_context.MyItems.Any(i => i.MyItemId == id))
{
return NotFound();
}
else
{
throw ex;
}
}
}
De esta manera, consultará la base de datos dos veces solo si ocurre una excepción al intentar eliminar el elemento con el ID especificado. Luego, si no se encuentra el elemento, devuelve un mensaje significativo; de lo contrario, simplemente devuelve la excepción (puede manejar esto de una manera más adecuada a su caso usando diferentes bloques de captura para diferentes tipos de excepciones, agregue más verificaciones personalizadas usando bloques if, etc.).
[Estoy usando este código en un proyecto MVC .Net Core / .Net Core con Entity Framework Core.]