SqlBulkCopy per due tabelle con associazione uno a molti

bulkinsert c# one-to-many sqlbulkcopy sql-server

Domanda

Ho usato SqlBulkCopy nel mio programma precedente e ho apprezzato il vantaggio della velocità della luce dei suoi INSERTS . Ma poi, stavo solo inserendo le cose in una sola tabella.

Ora ho due tabelle con un'associazione uno-a-molti, cioè la tabella A ha una chiave esterna nella tabella B Quindi ogni record in B trasporta un ID che è il risultato di un inserimento in A

Mi chiedo se esiste una soluzione per questo?

Esempio:

Darò un esempio migliore su questo e spero che alla fine troveremo una buona soluzione.

Abbiamo una tabella chiamata Contatti . E poiché ogni contatto può contenere zero o più indirizzi email, tali e-mail verranno archiviate in una tabella separata denominata ContactEmails . Quindi Contacts.Id diventerà FK su ContactEmails (ad esempio ContactEmails.ContactId ).

Diciamo che vorremmo inserire 1000 contatti e ognuno avrà zero o più e- mail . E ovviamente vogliamo usare SqlBulkCopy per entrambe le tabelle .

Il problema è che è solo quando inseriamo un nuovo contatto che conosciamo il suo Id . Una volta inserito il contatto, sappiamo che l' Id inserito è per esempio 15. Quindi inseriamo 3 email per questo contatto e tutti e tre avranno il valore ContactEmails.ContactId di 15. Ma non abbiamo conoscenza di 15 prima che il contatto sia inserito nel database .

Possiamo inserire tutti i contatti come massa nella tabella. Ma quando si tratta della loro e-mail, la connessione viene persa perché le e-mail non conoscono i propri contatti.

Risposta popolare

Disabilitare i vincoli (chiave esterna) prima dell'inserimento di massa. Quindi abilitalo di nuovo.

Assicurati di non avere violazioni dell'integrità referenziale.

Puoi disabilitare i vincoli FK e CHECK usando la query seguente:

ALTER TABLE foo NOCHECK CONSTRAINT ALL

o

ALTER TABLE foo NOCHECK CONSTRAINT CK_foo_column

Le chiavi primarie e i vincoli univoci non possono essere disabilitati, ma questo dovrebbe essere OK se ho capito bene.



Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché
Autorizzato sotto: CC-BY-SA with attribution
Non affiliato con Stack Overflow
È legale questo KB? Sì, impara il perché