J'utilise LINQ pour insérer des enregistrements dans la base de données. Je crée ces enregistrements et les conserve en utilisant une liste. Basé sur une certaine logique, je supprime certains des enregistrements en supprimant de la liste. (J'utilise le même objet DataContext).problème avec submitChanges() insertion d'enregistrements indésirables dans linq
Lorsque je veux insérer les enregistrements dans la base de données, je crée InsertOnSubmit() de la table linq correspondante, suivi de SubmitChanges() sur l'objet datacontext. LINQ insère également les enregistrements supprimés de la liste avec ceux qui sont présents dans la liste.
exemple:
//list to keep track of records to insert
List list
// add the records to list
list.add(some records)
//deleted last 2 records
list.remove()
//call InsertAllOnSubmit on the linq table passing the list object with records to insert
linqTable.InsertAllOnSubmit(list)
//call SubmitChanges on datacontext object
datacontext.SubmitChanges()
je suis tombé sur cet article msdn Object States and Change-Tracking (LINQ to SQL)
Vous pouvez demander explicitement les insertions en utilisant InsertOnSubmit. Alternativement, LINQ to SQL peut déduire Inserts par trouver des objets connectés à l'un des les objets connus qui doivent être mis à jour. Par exemple, si vous ajoutez un objet Untracked à un EntitySet (TEntity) ou définir une EntityRef (TEntity) à un objet Untracked, vous faites l'objet Untracked accessible par le biais d'objets suivis dans le graphique. Lors du traitement de SubmitChanges, LINQ to SQL traverse les objets suivis et découvre tous les objets persistants accessibles qui ne sont pas suivis . De tels objets sont candidats pour insertion dans la base de données .
Je suppose que la question se résume à ceci: comment changer l'état des objets supprimés en 'Untracked'?
J'ai essayé DeleteOnSubmit après avoir supprimé les objets de la liste mais cela donne une exception (Impossible de supprimer une entité qui n'a pas été attachée).
Quelqu'un peut-il me diriger vers une solution? Merci.
Je voudrais savoir si je peux y parvenir en utilisant uniquement LINQ. (Je sais que je peux utiliser un proc stocké et insérer seulement les enregistrements dans la liste.)
C'est pas. La liste remove() fonctionne correctement - je tiens une référence aux éléments que je veux supprimer. Les enregistrements insérés dans la base de données sont supérieurs aux enregistrements de la liste. – hIpPy
Un autre point à noter est que LINQ to SQL parcourt les objets suivis * lors du traitement de SubmitChanges * (et non pendant que les enregistrements sont ajoutés ou supprimés) et découvre tous les objets persistants inaccessibles qui ne sont pas suivis. Ce qui signifie que même si je change explicitement l'état des enregistrements indésirables en 'Untracked' alors que je les supprime, ils seront quand même découverts lorsque SubmitChanges sera finalement appelé plus tard. – hIpPy