Bonjour à tous,
dans mon application je dois supprimer les lignes existantes dans une table avant d'enregistrer les nouvelles lignes
Mais avec une requête linq to SQL, jene peux pas faire de Delete en masse :
Ceci fonctionne correctement mais quand on a 1000 lignes c'est très loooong
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 var reqDelete = from p in ContexteDAO.ContexteDonnees.TH_RESULTATS where (DateTime)p.DATE_ARRETE == DtDA && p.ENTITE_CALCUL.Equals(_EC) select p; foreach (var item in reqDelete) { ContexteDAO.ContexteDonnees.TH_RESULTATS.DeleteObject(item); } ContexteDAO.ContexteDonnees.SaveChanges(); ContexteDAO.Enregistrer();
Une autre solution :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ContexteDAO.ContexteDonnees.ExecuteStoreCommand("DELETE FROM TH_RESULTATS WHERE ENTITE_CALCUL='" + _EC + "' AND DATE_ARRETE=TO_DATE('" + _DA.Substring(0, 10).ToString() + "','DD/MM/YYYY')"); ContexteDAO.ContexteDonnees.SaveChanges(); ContexteDAO.Enregistrer();
MAis voila bien que la deuxième solution soit bcp plus rapide, j'ai une erreur lors de l'insertion de données plus tard dans cette table.
Message d'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 TH_RESULTATS cnew = new TH_RESULTATS { SEQUENCE_RESULTAT=compteur, ENTITE_CALCUL=item.ENTITE_CALCUL, DATE_ARRETE=item.DATE_ARRETE, }; compteur += 1; ContexteDAO.ContexteDonnees.TH_RESULTATS.AddObject(cnew); ContexteDAO.ContexteDonnees.SaveChanges();
J'ai l'impression que je force le delete avec ma requête mais que l'EF n'a pas pris en compte ces modifications.Les modifications apportées à la base de données ont été validées, mais une erreur s'est produite lors de la mise à jour du contexte de l'objet. ObjectContext est peut-être dans un état incohérent. Message d'exception interne : AcceptChanges ne peut pas continuer, car les valeurs de clés de l'objet sont en conflit avec un autre objet dans ObjectStateManager. Assurez-vous que les valeurs de clés sont uniques avant d'appeler AcceptChanges.
Que faut-il faire pour garder la solution de suppression en masse?
Comment mettre à jour l'EF?
Merci bcp
Bonne journée
Partager