Non riesco a trovare alcun esempio su come eseguire un inserimento in blocco/batch utilizzando Linq alle entità. Ragazzi, sapete come fare un inserto di massa?Come fare un inserto di massa - Linq alle entità
risposta
A volte devi semplicemente mescolare i modelli. È possibile utilizzare SqlBulkCopy
per questa parte del repository (poiché si collega direttamente all'API di copia bulk) e Entity Framework per il resto. E se necessario, un po 'di ADO.NET diretto. In definitiva, l'obiettivo è portare a termine il lavoro.
Per un esempio perfetto di come eseguire inserimenti di massa con LINQ alle entità, vedere http://archive.msdn.microsoft.com/LinqEntityDataReader. È un wrapper che consente un facile utilizzo di SqlBulkCopy.
@Marc Gravell è corretto, a volte devi mescolare i modelli per portare a termine il lavoro.
Ho scritto una classe che inserirà in massa le entità EF (o qualsiasi tipo di oggetto purché i nomi delle proprietà corrispondano ai nomi delle colonne).
La classe supporta la personalizzazione della dimensione del batch, gli eventi di inserimento post &, gli inserimenti in coda e la "modalità firehose" (assegnando un miliardo di oggetti, rispetterà la dimensione del batch).
- Il codice:
BulkInserter<T>
- How to use it
Per l'inserimento di una quantità enorme di dati in un database, che ho usato per raccogliere tutte le informazioni inserendo in una lista e convertire questa lista in una DataTable
. Quindi inserisco l'elenco in un database tramite SqlBulkCopy
.
Dove mando la mia lista generata LiMyList
che contengono le informazioni di tutti i dati di massa, che voglio inserire nel database
e passarlo al mio grosso operazione di inserimento
InsertData(LiMyList, "MyTable");
Dove InsertData
è
public static void InsertData<T>(List<T> list,string TabelName)
{
DataTable dt = new DataTable("MyTable");
clsBulkOperation blk = new clsBulkOperation();
dt = ConvertToDataTable(list);
ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal);
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["SchoolSoulDataEntitiesForReport"].ConnectionString))
{
bulkcopy.BulkCopyTimeout = 660;
bulkcopy.DestinationTableName = TabelName;
bulkcopy.WriteToServer(dt);
}
}
public static DataTable ConvertToDataTable<T>(IList<T> data)
{
PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(typeof(T));
DataTable table = new DataTable();
foreach (PropertyDescriptor prop in properties)
table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
foreach (T item in data)
{
DataRow row = table.NewRow();
foreach (PropertyDescriptor prop in properties)
row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
table.Rows.Add(row);
}
return table;
}
È possibile farlo utilizzando bulk insert extension
Utilizza SqlBulkCopy e datareader personalizzato per ottenere prestazioni massime. Di conseguenza, è più di 20 volte più veloce rispetto all'utilizzo di inserimento regolare o AddRange
Esempio di utilizzo di estensione efbulkinsert:
context.BulkInsert(hugeAmountOfEntities);
Questa è una libreria fantastica. Ho già scritto da zero SqlBulkCopy, ma è molto più semplice e veloce – Andrew
- 1. Come fare LEFT JOIN in LINQ alle entità?
- 2. linq alle entità generate sql
- 3. Come riutilizzare un filtro di campo in LINQ alle entità
- 4. Utilizzo di DateTime in LINQ alle entità
- 5. entità quadro entità sql vs linq alle entità
- 6. Campi di larghezza fissa inserto di massa
- 7. LEFT JOIN in LINQ alle entità?
- 8. Clausola dynamic where in Linq alle entità
- 9. Inserto di massa in MongoDB usando mangusta
- 10. Come posso fare un Unione tutto in Entity Framework LINQ alle entità?
- 11. Mesi distinti con Linq (alle entità)
- 12. Problema con LINQ alle entità e String.StartsWith
- 13. LINQ alle entità query a DataTable
- 14. LINQ alle entità contiene ricerca maiuscole/minuscole
- 15. Grado SQL in LINQ alle entità
- 16. Aggiungere una data in Linq alle entità
- 17. DataLoadOptions equivalenti per LINQ alle entità?
- 18. Entity Framework vs Linq alle entità vs Linq a SQL
- 19. Esiste un modo per ottimizzare questa query LINQ alle entità?
- 20. Come si effettua una query "Eccetto" LINQ alle entità?
- 21. Come si fanno più join interni in Linq alle entità
- 22. Query di join esterno tramite LINQ alle entità
- 23. LINQ alle entità tramite la proprietà di interfaccia
- 24. LINQ alle entità per la sottrazione di 2 date
- 25. UPDATE rispetto alle prestazioni INSERTO
- 26. linq alle entità, una clausola where in where? (interno dove)
- 27. inserto di massa Eloquente, ON DUPLICATE KEY UPDATE
- 28. Modo corretto per eliminare record in LINQ alle entità
- 29. estendere linq alle entità per riconoscere i metodi personalizzati
- 30. Confronto delle date utilizzando LINQ alle entità (Entity Framework)
oh noes - link morto –
trovato qui ... https://github.com /matthewschrager/Repository/blob/master/Repository.EntityFramework/EntityDataReader.cs –