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