Возможно, вы захотите начать с метода стиля IfExists, а затем пропустите сохранение ваших изменений, если у вас нет изменений.
Как отметил Лукас, блоки try-catch имеют большие накладные расходы, если вы попадаете в блок catch, поэтому обычно вы не хотите на это полагаться, если нет никакого способа определить, существует ли уже элемент.
Не используйте try-catch для выполнения работы оператора If. Try-catch для необычных непредвиденных событий.
EDIT
В обновленном коде вы не можете перехватить исключение, которое будет вызвано методом «AddToXXXXXX».
Вы должны сделать
If(!XXXXXX.Contains(newItemValue))
{
try
{
add...
savechanges...
}
catch
{
}
}
в качестве альтернативы, вы можете разделить Add и Savechanges на разные блоки try-catch, но это необходимо только в том случае, если SaveChanges запускается даже в случае сбоя Add.