Restituisci i record da SqlBulkCopy usando IDataReader

c# entity-framework sqlbulkcopy sql-server

Domanda

Sto facendo un grosso inserimento / aggiornamento al mio database facendo uso della classe SqlBulkCopy. Dopo che i dati sono stati inseriti / aggiornati, voglio fare più logica con esso.

Attualmente, il mio IDataReader ha un mix di record da inserire e aggiornare. Tutte le azioni contro il database funzionano correttamente. Tuttavia, dopo che i dati sono stati scritti, l'oggetto IDataReader non ha più alcuna riga.

C'è un modo per mantenere le righe, completo del campo Identificatore univoco generato automaticamente per i record inseriti?

Ecco uno snippet dal mio codice:

    public IDataReader DoBulkCopy<T>(List<T> DataToInsert, string DestinationTableName)
    {
        var BulkCopy = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["MyConn"].ConnectionString, SqlBulkCopyOptions.KeepNulls);
        BulkCopy.BulkCopyTimeout = 0;
        BulkCopy.BatchSize = 50;
        BulkCopy.DestinationTableName = DestinationTableName;

        IDataReader reader = DataToInsert.AsDataReader();
        BulkCopy.WriteToServer(reader);
        BulkCopy.Close();

        return reader;
    }

Grazie in anticipo.

Risposta accettata

Sono giunto alla conclusione dopo molte ricerche che questo non è possibile. Sono stato in grado di inventare un lavoro. Quello che ho fatto è stato scrivere DateTime.Now () su una variabile prima dell'esecuzione della query. Dopo aver eseguito la query, ho eseguito una query di selezione per tutti i record in cui il campo Data / ora LastUpdated è maggiore della variabile DateTime registrata prima dell'inserimento / aggiornamento.

Si noti che questo funziona nel mio scenario perché i dati in questa tabella sono inseriti / aggiornati solo da questo programmatore. Se si trattava di un'app in cui i dati possono provenire da più luoghi o utenti, questo approccio dovrebbe essere ripensato o adattato.



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é