Joindre la list à db avec linq à sql

mon problème est que j'essaye d'attacher une List<> dans une table dans la database. Certains éléments de cette list <> contiennent une key primaire – ces éléments doivent être traités comme des mises à jour de la database. Certains éléments n'ont pas de key primaire – ces éléments doivent être INSERT dans la database.

j'ai essayé

  Context.myTable.AttachAll(myList, true); Context.myTable.AttachAll(myList, false); Context.myTable.AttachAll(myList); 

tout ne fonctionne pas. Alors je fais quelque chose comme:

  var listFromDb = Context.myTable.Where(x => myListOfIds.contains(x.primaryKey)); foreach (var obj in myList) { if(obj.primaryKey > 0) { Context.myTable.Attach(obj, listFromDb.FirstOrDefault(x => x.primaryKey == obj.primaryKey); } else{ Context.myTable.InsertOnSubmit(obj); } Context.SubmitChanges(); } 

il doit y avoir un moyen plus facile de parcourir chaque élément de la list et de décider manuellement de la météo ou de ne pas faire attacher ou insert. Y a-t-il quelque chose qui me manque ici?

MODIFIER

J'ai trouvé cette même question il y a presque 2 ans – Linq To Sql en utilisant AttachAll. DuplicateKeyException , la réponse est essentiellement ce que ma solution était. Avec les nouvelles Entités 6, et toutes les nouvelles choses ajoutées ces deux dernières années, y a-t-il maintenant un moyen de faire ce que j'essaie de faire?

Je ne sais pas s'il y a une meilleure solution mais je pense que cela fonctionnera bien:

 foreach(var item in myList) { if(item.Id > 0) context.Entry(item).State = EntityState.Modified; else context.Table.Add(item); } 

Et de cette façon, vous n'avez pas besoin de récupérer tous les anciens éléments de la database.

http://msdn.microsoft.com/en-us/library/hh846520(v=vs.103).aspx

Vous devez utiliser ObjectContext mais plutôt que DbContext je pense que cela dépend de la façon dont vous avez construit votre context.