2017-07-15 1 views
1

J'ai une liste d'objets mis à jour. Et j'ai essayé de mettre à jour tous les enregistrements avec un seul appel de base de données. (Une commande context.SaveChanges()). Ce programme s'exécute dans un service Windows. Mon problème est au lieu de mettre à jour je multiplie tous les enregistrements sur la base de données et en ajoutant des doublons. Voici mon code.Mise à jour par lots d'une liste de structures d'entités d'enregistrement

//adding the list of updated customer objects to the list 
context_CLTUS.Customer_Updates.AddRange(list.customerUpdateList); 
foreach (var j in list.customerUpdateList) 
{ 
    //calling entity state modify for each record 
    context_CLTUS.Entry(j).State = EntityState.Modified; 
} 
//save updated list in one db call. 
context_CLTUS.SaveChanges(); 

Je ne peux pas expliquer pourquoi tous les enregistrements sont dupliqués au lieu de la mise à jour. Pourriez-vous s'il vous plaît expliquer et m'aider à ce sujet. Je vous remercie.

+1

seule chose dont vous avez besoin est context_CLTUS.SaveChanges(); supprimer le reste des choses –

+2

Que se passe-t-il si vous supprimez l'appel 'AddRange'? –

+0

En supprimant 'AddRange' travaillé pour moi merci pour les commentaires! – thilanka1989

Répondre

1

Référez à cette answer

Vous pouvez essayer ces solutions:

  1. opération de mise à jour de swap dans un TransactionScope.

  2. Définir Configuration.AutoDetectChangesEnabled = false. Essayez Entity Framework Plus, une bibliothèque d'amélioration de haute performance.

+0

Essayé Entity Framework Plus pour la première fois, sauvé mon temps! Je vous remercie! – thilanka1989

+0

@ thilanka1989 désolé pour mon malentendu, et dans votre cas, peut-être les commentaires ci-dessus sont plus faciles, merci pour votre vote aussi. – Nico