У меня есть процесс в моей программе, который использует Entity Framework 4 EDM. Объект контекста сущности содержит функции импорта для вызова хранимых процедур.
Процесс получает пакет данных с удаленного сервера. Пакет может состоять из данных для любой из наших таблиц/типов данных (каждый тип данных хранится в своей таблице). Пакет также может содержать данные для одной и той же строки несколько раз. Он должен обрабатывать это как одну вставку (для первого появления) и одно или несколько обновлений (для каждого последующего появления). Поэтому хранимые процедуры реализуют операцию upsert с помощью команды INSERT ... ON EXISTING UPDATE
.
Наш код в основном определяет, какую хранимую процедуру вызывать, а затем вызывает ее, используя метод объекта контекста сущности для этой хранимой процедуры. Затем весь пакет должен быть выполнен за одну транзакцию, поэтому мы вызываем context.Connection.BeginTransaction()
в начале пакета.
Есть один тип данных, содержащий миллионы строк. Нам нужно загрузить эти данные как можно быстрее. Я реализую логику для импорта этого типа данных с помощью класса SABulkCopy
. Это также должно быть частью уже начатой одиночной транзакции. Проблема в том, что мне нужно передать SATransaction
в конструктор класса SABulkCopy
(нет возможности установить его с помощью свойств), и у меня нет SATransaction
. context.Connection.BeginTransaction()
возвращает DBTransaction
. Я безуспешно пытался преобразовать это в SATransaction
.
Как правильно заставить объект SABulkCopy
присоединиться к транзакции?