SqlBulkCopy y DataTables con relación padre / hijo en la columna de identidad

Tenemos la necesidad de actualizar varias tablas que tienen relaciones padre / hijo basadas en una clave primaria de Identidad en la tabla principal, a la que una o más tablas secundarias denominan clave externa.

Debido al gran volumen de datos, nos gustaría construir estas tablas en la memoria, luego usar SqlBulkCopy de C # para actualizar la base de datos en masa desde el DataSet o los DataTables individuales.Además, nos gustaría hacer esto en paralelo, desde varios subprocesos, procesos y posiblemente clientes.

Nuestro prototipo en F # es muy prometedor, con un aumento de rendimiento de 34x, pero este código fuerza valores de identidad conocidos en la tabla principal. Cuando no está forzado, la columna de Identidad se genera correctamenteen la base de datos cuando SqlBulkCopy inserta las filas, pero los valores de Identidad NO se actualizan en la DataTable en memoria. Además, incluso si lo fueran, no está claro si el DataSet arreglaría correctamente las relaciones padre / hijo, por lo que las tablas secundarias podrían escribirse posteriormente con los valores correctos de la clave externa.

¿Alguien puede explicar cómo hacer que SqlBulkCopy actualice los valores de Identidad y cómo configurar un DataSet para conservar y actualizar las relaciones padre / hijo, si esto no se hace automáticamente cuando se llama un DataAdapter a FillSchema en los DataTables individuales?

Respuestas que no estoy buscando:

Lea la base de datos para encontrar el valor de identidad más alto actual, luego auméntela manualmente al crear cada fila principal. No funciona para múltiples procesos / clientes y, según entiendo, las transacciones fallidas pueden hacer que se omitan algunos valores de Identidad, por lo que este método podría arruinar la relación.Escriba las filas primarias una a la vez y solicite nuevamente el valor de Identidad. Esto derrota al menos algunas de las ganancias obtenidas con el uso de SqlBulkCopy (sí, hay muchas más filas secundarias que padres), pero todavía hay muchas filas primarias).

Similar a la siguiente pregunta sin respuesta:

¿Cómo actualizar las tablas principales y secundarias del conjunto de datos con una clave de identidad generada automáticamente?

Respuestas a la pregunta(5)

Su respuesta a la pregunta