insert en vrac avec linq-to-sql
J'ai une requête qui ressemble à ceci:
using (MyDC TheDC = new MyDC())
{
foreach (MyObject TheObject in TheListOfMyObjects)
{
DBTable TheTable = new DBTable();
TheTable.Prop1 = TheObject.Prop1;
.....
TheDC.DBTables.InsertOnSubmit(TheTable);
}
TheDC.SubmitChanges();
}
Cette requête fondamentalement insère une liste dans la base de données à l'aide de linq-to-sql. Maintenant que j'ai lu en ligne que L2S ne prend PAS en charge les opérations en bloc.
Mon travail de requête par l'insertion de chaque élément à un moment ou l'ensemble d'entre eux dans une écriture?
Merci pour la clarification.
source d'informationauteur frenchie
Vous devez vous connecter pour publier un commentaire.
Le terme
Bulk Insert
se réfère généralement à la spécifique à SQL Server ultra-rapide de la pca en fonction SqlBulkCopy mise en œuvre. Il est construit sur le haut de IRowsetFastLoad.Linq-2-SQL ne permet pas de mettre en œuvre insérer à l'aide de ce mécanisme, en vertu de tout conditions.
Si vous avez besoin de charger en bloc de données dans SQL Server et que vous avez besoin d'être rapide, je vous recommande de codage à la main à l'aide de SqlBulkCopy.
Linq-2-SQL tentera de réaliser certaines optimisations pour accélérer plusieurs insertions, mais il a encore en deçà de nombreux micro Orm (même si pas de micro Orm je sais que de mettre en œuvre SqlBulkCopy)
J'ai modifié le code à partir du lien suivant afin d'être plus efficace et utilisé dans mon application. Il est très pratique car vous pouvez simplement le mettre dans une classe partielle sur le dessus de votre courant généré automatiquement classe. Au lieu de
InsertOnSubmit
ajouter des entités à la liste, et au lieu deSubmitChanges
appelYourDataContext.BulkInsertAll(list)
.http://www.codeproject.com/Tips/297582/Using-bulk-insert-with-your-linq-to-sql-datacontex
Il va générer une instruction insert unique pour chaque enregistrement, mais tout envoyer vers le serveur en un seul lot et exécuter en une seule transaction.
Qu'est ce que le SubmitChanges() en dehors de la boucle.
Si vous avez déménagé à l'intérieur, puis, à chaque itération de la boucle pars sur le serveur pour l'INSERTION et l'exécuter dans sa propre transaction.
Je ne crois pas qu'il existe un moyen pour déclencher un SQL d'INSERTION en bloc.