Из вашей ошибки очевидно, что в методе FindById ожидается int. Можете ли вы проверить тип поля в базе данных, но исходя из вашей модели, я бы сказал, что у вас нет правильного типа. Строка не может использоваться в качестве идентификатора таким образом, потому что SQL сервер не знает, как сгенерировать для этого значение.
Вы можете проверить этот пост для получения более подробной информации об этом: DatabaseGeneratedOption.Identity не генерирует идентификатор
Итак, в заключение вы должны проверить, что у вас действительно есть в базе данных, чтобы определить, является ли ваша модель неправильной.
Если это не так, и вы это делаете есть строка в базе данных, вы должны просто получить элемент с помощью метода SingleAsyn c (обратите внимание, что он выдаст исключение, если идентификатор неверен).
var item = await _context.Items.SingleAsync(e => e.ItemId == id);
Если вы не хотите исключения, если идентификатор не существует, вы можете использовать:
var item = await _context.Items.SingleOrDefaultAsync(e => e.ItemId == id);
, который вернет null для несуществующего идентификатора.