Фон
У нас есть инициируемый пользователем процесс, который взаимодействует с API на основе EF6 для выполнения сложных вычислений на основе базы данных заказов для подготовки нового манифеста заказа. Объем новых записей в манифесте для вставки в EF привел к огромным накладным расходам в журнале транзакций, которые мы сократили, используя шаблон единицы работы для вставки меньших пакетов отдельных записей манифеста. Однако это оказалось меньшим выигрышем в производительности, чем мы ожидали, поскольку база данных запускается на вставках манифеста для выполнения другого процесса документации с большими издержками.
После некоторого обсуждения мы решили перейти на вставку манифестов в временная таблица, затем пакетная вставка из этой таблицы в фактическую таблицу манифеста. Теоретически это делает журнал транзакций небольшим и запускает триггер вставки только один раз.
Но записи манифеста довольно сложны, и теперь мы должны встроить параметризованную вставку в временную таблицу.
Вопрос
Как известно любому, кто запускает профилировщик в базе данных с указанным приложением EF, EF автоматически создает параметризованные запросы вставки. Я имел возможность конструктивно опрашивать набор данных, например, захватить имена столбцов, передав context
и получив
((IObjectContextAdapter) context).ObjectContext.CreateObjectSet<Manifest>();
и перейдя оттуда. Это уже использовалось для создания временной таблицы, делая пустой выбор не вычисляемых столбцов из таблицы манифеста во временную таблицу. Есть ли способ программно определить, какими будут настройки параметров для вставки EF?