Sto cercando di aumentare le prestazioni per le operazioni di inserimento utilizzando EntityFramework.BulkInsert
.
Attualmente ho qualcosa di simile a questo:
var theEntities = ChangeTracker.Entries<BaseEntity>().ToList();
this.BulkInsert(theEntities, _transaction.UnderlyingTransaction);
Che lancia un'eccezione:
Nessuna mappatura tabella fornita
Non vedo il punto o quello che posso fare come degli esempi per EF6, i primi del database sono davvero difficili da trovare.
Qualche idea?
Cambiando il codice come dai commenti, ora si genera la seguente eccezione:
Digitare 'Private_DatabaseEntities.BaseEntity' non è stato trovato nel contesto 'Private_DatabaseEntities.EntityModelContext'
mentre EntityModelContext
è il contesto che sto usando (ereditato da DbContext
) e BaseEntity
è la classe base per tutte le entità concrete.
Si tenta di inserire DbEntityEntry che non è mappato e non l'entità corrente.
Prova questo
var theEntities = ctx.ChangeTracker.Entries<BaseEntity>().Select(x => x.Entity).ToList();
this.BulkInsert(theEntities, _transaction.UnderlyingTransaction);
La libreria EntityFramework.BulkInsert funziona solo con entità semplice. Non funziona con l'ereditarietà come TPC e TPT e non restituisce il valore dell'identità.
Per correggere il tuo secondo problema, dovrai usare un'altra libreria.
Entity Framework Extensions
Consenti alle entità BulkSaveChanges, BulkInsert, BulkUpdate, BulkDelete e BulkMerge nel tuo database. Supporta tutti i tipi di associazioni ed eredità (TPC, TPH e TPT)
// Easy to use
context.BulkSaveChanges();
// Easy to customize
context.BulkSaveChanges(operation => operation.BatchSize = 1000);
// For direct bulk insert
var theEntities = ctx.ChangeTracker.Entries<BaseEntity>().Select(x => x.Entity).ToList();
context.BulkInsert(theEntities);
Disclaimer : sono il proprietario del progetto Entity Framework Extensions