Я потребляю большое количество данных JSON и сохраняю их в базе данных SQL Server через класс SQLBulkCopy.
SqlBulkCopy bulkInsert = new SqlBulkCopy(conn);
bulkInsert.DestinationTableName = "dbo.Orders";
conn.Open();
bulkInsert.WriteToServer(rows.ToArray());
rows - это список типов DataRow.
Данные, которые я потребляю, являются заказами, поэтому основная часть данных вставляется в таблицу заказов, но некоторые другие таблицы также необходимо вставлять, однако эти вставки должны иметь ссылку на строки, вставленные в таблицу заказов.
Возможно ли это с помощью SQLBulkCopy или мне нужно вручную вставить каждую строку, запросить базу данных для вставленной строки, чтобы вернуть исходное поле, а затем использовать это значение в будущих вставках?
SqlBulkCopy не может вернуть введенное значение идентификатора.
Поэтому использование только SqlBulkCopy невозможно, но это может быть достигнуто с помощью трюка с временной таблицей.
Вкратце:
Отказ от ответственности : Я являюсь владельцем проекта Bulk Operations
Этот проект преодолел ограничение SqlBulkCopy, добавив некоторые функции, такие как:
Пример:
var bulk = new BulkOperation(connection)
bulk.DestinationTableName = "dbo.Orders";
bulk.ColumnMappings.Add("OrderId", ColumnMappingDirectionType.Output);
bulk.ColumnMappings.Add("Price");
bulk.ColumnMappings.Add("Quantity");
bulk.BulkInsert(rows);