На самом деле нет способа сделать это лучше.EF не является хорошим решением для такого рода задач.Вы должны знать, если продукт уже существует в базе данных для правильной работы, поэтому вам всегда нужно выполнять дополнительный запрос - вы можете сгруппировать несколько продуктов в один запрос, используя .Contains
(например, SQL IN
), но это решит только проблему проверки.Хуже всего то, что каждый INSERT
или UPDATE
также выполняется в отдельном цикле, и решить эту проблему невозможно, поскольку EF не поддерживает пакетирование команд.
Создание хранимой процедуры и передача информации опродукт для этой хранимой процедуры.Хранимая процедура будет выполнять вставку или обновление в зависимости от наличия записи в базе данных.
Вы даже можете использовать некоторые более продвинутые функции, такие как табличные параметры, для передачи нескольких записей из Excel в процедуру с помощью одного вызова или импортаExcel во временную таблицу (например, с SSIS) и обрабатывать их все непосредственно на сервере SQL.В качестве последнего вы можете использовать массовую вставку, чтобы получить все записи в специальной таблице импорта и снова обработать их одним вызовом хранимых процедур.