SqlBulkCopy i DataTables z relacją rodzica / dziecka na kolumnie tożsamości

Musimy zaktualizować kilka tabel, które mają relacje nadrzędny / podrzędny w oparciu o klucz podstawowy Identity w tabeli nadrzędnej, który jest określany przez jedną lub więcej tabel podrzędnych jako klucz obcy.

Ze względu na dużą ilość danych chcielibyśmy zbudować te tabele w pamięci, a następnie użyć SqlBulkCopy z C #, aby zaktualizować masę bazy danych z DataSet lub indywidualnych tabel danych.Chcielibyśmy to zrobić równolegle, z wielu wątków, procesów i ewentualnie klientów.

Nasz prototyp w F # jest bardzo obiecujący, z 34-krotnym wzrostem wydajności, ale ten kod wymusza znane wartości Tożsamości w tabeli nadrzędnej. Gdy nie jest wymuszony, kolumna Tożsamość jest poprawnie generowanaw bazie danych gdy SqlBulkCopy wstawia wiersze, ale wartości Tożsamości NIE są aktualizowane w pamięci DataTable. Co więcej, nawet gdyby tak było, nie jest jasne, czy DataSet poprawnie poprawi relacje rodzic / dziecko, tak aby tabele potomne mogły być następnie zapisywane z poprawnymi wartościami kluczy obcych.

Czy ktoś może wyjaśnić, jak zaktualizować wartości Tożsamości SqlBulkCopy i jak skonfigurować DataSet, aby zachować i zaktualizować relacje rodzic / dziecko, jeśli nie jest to wykonywane automatycznie, gdy DataAdapter jest wywoływany do FillSchema na poszczególnych tabelach danych.

Odpowiedzi, których nie szukam:

Przeczytaj bazę danych, aby znaleźć aktualną najwyższą wartość Tożsamości, a następnie ręcznie zwiększ ją podczas tworzenia każdego wiersza nadrzędnego. Nie działa dla wielu procesów / klientów i, jak rozumiem, nieudane transakcje mogą powodować pomijanie niektórych wartości Tożsamości, więc ta metoda może zepsuć relację.Napisz wiersze nadrzędne pojedynczo i poproś o zwrot wartości tożsamości. To pokonuje przynajmniej niektóre zyski dzięki użyciu SqlBulkCopy (tak, jest dużo więcej wierszy potomnych niż rodziców, ale wciąż jest wiele wierszy nadrzędnych).

Podobnie do następującego pytania bez odpowiedzi:

Jak zaktualizować tabele nadrzędny i podrzędny zestawu danych za pomocą wygenerowanego klucza tożsamości?

questionAnswers(5)

yourAnswerToTheQuestion