Я використовую такий код в одному зі своїх проектів:
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;
}
}
}
Таким чином, він буде запитувати базу даних двічі, лише якщо виняток виникає при спробі видалити елемент із вказаним ідентифікатором. Потім, якщо елемент не знайдено, він повертає змістовне повідомлення; в іншому випадку він просто відкидає виняток назад (ви можете впоратись із цим способом, який більше відповідає вашому випадку, використовуючи різні блоки вилову для різних типів винятків, додайте більше спеціальних перевірок, використовуючи, якщо блоки тощо).
[Я використовую цей код у проекті MVC .Net Core / .Net Core з Entity Framework Core.]