В моем приложении ASP.NET MVC, когда я собираюсь извлечь элемент, я обычно проверяю его существование с помощью Any()
, после чего я выберу этот элемент на .Single()
. Однако это приходит на ум, чтобы уменьшить количество запросов к базе данных, и я пытался использовать эту структуру:ASP.NET MVC: Является ли хорошей практикой проверять существование объекта Linq в базе данных с помощью обработки исключений?
item myItem = null;
try
{
myItem = (from item in dbContext.items
where item.id == itemID
select item).Single();
}
catch (Exception e)
{
// i understand item is not exist in db
}
// if item is available
if (myItem ==null){
//item was not in db
}else{
//item is present id db
}
Это только выборку базы данных один раз, и если элемент не существует, он будет бросать исключение, так что я не нужен чтобы проверить результаты Any()
. Является ли это повышением эффективности моего приложения или это приведет к некоторому ухудшению из-за обработки исключений?
Почему вы не используете 'SingleOrDefault()'. Тогда вам не понадобится обработка исключений для этой ситуации, и оставшаяся часть кода может остаться нетронутой. –
, не забывая, что SingleOrDefault должен использоваться в возвращенных случаях с одной строкой. если dbContext.items удалил более одного результата, он выдал исключение. это будет использование FirstOrDefault, а FirstOrDefault работает быстрее, чем SingleOrDefault. –
. Одним из важных соображений является также то, насколько дороги исключения для броска. Исключайте исключения, исключительные обстоятельства! – DavidG