Insertion en bloc avec SqlBulkCopy à partir d'une liste d'objets
Lorsque vous êtes confronté à la tâche d'effectuer une insertion substantielle dans une base de données à partir d'une liste d'objets des objets simples, on peut s'interroger sur l'utilisation de SqlBulkCopy pour accomplir cet exploit. La question se pose de savoir si une implémentation personnalisée de l'interface IDataReader est nécessaire pour une telle opération.
On peut facilement répondre à cette question en explorant les capacités de FastMember. En utilisant cette bibliothèque, vous pouvez exécuter des insertions groupées sans avoir besoin d'un DataTable intermédiaire. Cette approche simplifie non seulement la procédure mais améliore également les performances, comme le démontrent les tests empiriques.
En pratique, l'implémentation utilisant FastMember se déroule comme suit :
using(var bcp = new SqlBulkCopy(connection)) using(var reader = ObjectReader.Create(data, "Id", "Name", "Description")) { bcp.DestinationTableName = "SomeTable"; bcp.WriteToServer(reader); }
Il est à noter qu'ObjectReader peut s'adapter aux sources de données génériques et non génériques. De plus, préciser à l’avance les noms des membres n’est pas une exigence stricte. Cependant, l'exploitation de la fonctionnalité ColumnMappings de SqlBulkCopy peut s'avérer avantageuse dans les situations où la spécification manuelle est omise.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!