443 messaggi dal 11 febbraio 2013
ho provato ad ottimizzare un metodo che inserisce record con entity 6
(https://stackoverflow.com/questions/5940225/fastest-way-of-inserting-in-entity-framework)

public void FillDettaglio()
    {
        NORTHWNDEntities context = new NORTHWNDEntities(); 
        //using (var dbContextTransaction = context.Database.BeginTransaction())
        //{    
            context.Configuration.AutoDetectChangesEnabled = false;
            try
            {
                int count = 0;
                foreach (var entityToInsert in GetEntitiesToInsert())
                {
                    ++count;
                    context = AddToContext(context, entityToInsert, count, 100, true);
                }

                context.SaveChanges();

                /*dbContextTransaction.Commit()*/;
            }
            catch (Exception)
            {
                //dbContextTransaction.Rollback();
            }
        //}

        context.Dispose();       
    }
 
    private NORTHWNDEntities AddToContext(NORTHWNDEntities context, DETTAGLIO_ORDINE_SELEZIONATO entity, int count, int commitCount, bool recreateContext)
    {
        context.Set<DETTAGLIO_ORDINE_SELEZIONATO>().Add(entity);

        if (count % commitCount == 0)
        {
            context.SaveChanges();

            if (recreateContext)
            {
                context.Dispose();
                context = new NORTHWNDEntities();
                context.Configuration.AutoDetectChangesEnabled = false;
            }
        }

        return context;
    }


Ho provato come si vede dai commenti ad usare una transazione ma ottengo errore di commit (Il valore non può essere null.Nome parametro: connection) su dbContextTransaction.Rollback() e se commento questa riga non ho errori tuttavia non vengono aggiunti gli ultimi 100 record

potete aiutarmi a capire ?
Modificato da jjchuck il 29 settembre 2017 17.50 -
92 messaggi dal 22 gennaio 2017
Contributi
Ricreando il Context perdi l'oggetto di transazione.
Perchè nella funzione sottostante non fai un semplice SaveChanges?

Se devi inserire massivamente delle righe, prova a dare un occhio a:
http://entityframework-extensions.net/
443 messaggi dal 11 febbraio 2013
grazie
ora capisco

cmq si è inutile il rollback perchè debbo solo inserire record

In quel modo 17000 record in 10 secondi circa...e mi va bene

dici che ricreare il contesto sia inutile se non controproducente ?

grazie ancora
92 messaggi dal 22 gennaio 2017
Contributi
Nel tuo caso ricreare il contesto non serve.
443 messaggi dal 11 febbraio 2013
hai ragione
ho provato su 20k records e non serve

grazie ancora per i suggerimenti

ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.