3 votes

Entity framework -Enregistrement d'une table de données dans le serveur SQL sans boucle for each

Je développe une application avec c#.net entity framework et sql server 2008r2. Voici mon code

Code C#.net

foreach (var tempProduct in purchaseDetailTemp)
{
    invPurchase = new InvPurchaseDetailTemp();
    invPurchase.ProductID = tempProduct.InvProductMasterID;
    invPurchase.ProductCode = tempProduct.ProductCode;
    invPurchase.ProductName = tempProduct.ProductName;
    context.InvPurchaseDetails.Add(invPurchase);
    context.SaveChanges();
}

purchaseDetailTemp est ma table de données. Je veux sauvegarder les données sans foreach boucle. J'essaie de le faire avec mergeSql y insert de masse . Y a-t-il un moyen de le faire ?

6voto

Seabizkit Points 1434

Déplacer le saveChange hors de la boucle.

pour le rendre plus rapide... vous pouvez utiliser l'option AddRange sur l'entité contextuelle, ce qui réduit les vérifications du modèle d'entité.

Le for-loop sert juste à le convertir dans le bon type d'entité. S'il s'agit déjà du bon type, la boucle peut être ignorée.

voir ci-dessous..

List<InvPurchaseDetail>  invPurchaselist = new List<InvPurchaseDetail>();
foreach (var item in purchaseDetailTemp)
{
    var newItem= new InvPurchaseDetail();
    newItem.ProductID = item.InvProductMasterID;
    newItem.ProductCode = item.ProductCode;
    newItem.ProductName = item.ProductName;

    invPurchaselist.add(newItem)
}
context.InvPurchaseDetails.AddRange(invPurchaselist);
context.SaveChanges();

3voto

Webbanditten Points 663

EntityFramework dispose d'un suivi des modifications, ce qui signifie que lorsque vous exécutez .SaveChanges(); il persiste toutes les mises à jour de la source de données et réinitialise le suivi des changements dans le contexte de l'objet.

Cela signifie également que si vous voulez insérer en masse, vous devez toujours itérer, mais vous pouvez vous déplacer. .SaveChanges(); hors de votre portée d'itération pour n'exécuter vers la base de données qu'une seule fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X