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?