2009-12-03 6 views
0

Nous avons une seule table dans la base de données qui représente un groupe de divs dans notre page Web. Chaque div a une largeur de pixel, une hauteur, un sommet et une gauche enregistrés en tant qu'enregistrements individuels dans la table. Il a une clé primaire. Nous chargeons tous les div depuis la table vers la page Web, l'utilisateur réorganise les squres, puis en une seule transaction enregistre les carrés modifiés dans la table en utilisant les méthodes Linq "OnSubmit".Comment supprimer et insérer des enregistrements avec la même clé primaire en utilisant les transactions Linq

Notre problème est que nous supprimons tous les carrés, puis réinsérons tous les carrés. Sans transactions, cela fonctionne très bien. Avec les transactions, il marque tous les enregistrements à supprimer, puis les insertions mettent réellement à jour les enregistrements déjà marqués pour être supprimés. À la fin, certains carrés sont manquants.

Nous faisons DeleteOnSubmit(), puis InsertOnSubmit(), puis éventuellement .SubmitChanges().

Où commettons-nous notre erreur? Comment gérer la suppression et la réinsertion dans une même transaction? Évidemment nous pourrions SubmitChanges() après la suppression, mais cela ne le mettrait pas dans la même transaction.

Des idées? Des motifs? Avez-vous besoin du code source actuel pour continuer?

+0

Pourquoi ne faites-vous pas simplement la mise à jour des données? Supprimer/insérer semble être une perte de temps. De plus, les clés primaires sont-elles générées automatiquement ou les créez-vous manuellement? – tvanfosson

+0

Les clés ne sont pas générées automatiquement. La page Web revient avec quels carrés doivent être sauvegardés. Je suppose que nous pourrions supprimer le complément de ce qui est retourné en utilisant les enregistrements en RAM. Les carrés sont également manipulés par plusieurs utilisateurs, mais les carrés ont des couleurs et nous ne changeons qu'une seule couleur à la fois. –

+0

Cela semble intéressant http://msdn.microsoft.com/en-us/library/bb386982.aspx –

Répondre

2

Nous vous recommandons d'ouvrir la transaction vous-même et de la valider, si nécessaire.
Dans ce cas, la transaction interne ne sera pas ouverte.

 
t = db.Connection.BeginTransaction(); 
db.Transaction = t; 
DeleteOnSubmit(); 
SubmitChanges(); 
InsertOnSubmit(); 
SubmitChanges(); 
t.Commit(); 
+0

C'est exactement ce que je fais, mais la suppression ne fonctionne pas. Si je supprime 7 enregistrements et insère 6, il me reste encore 7 enregistrements. Pas d'erreurs lancées. – Gullbyrd

+0

Veuillez nous envoyer un projet de test pour reproduire le problème via http://www.devart.com/company/contactform.html. – Devart

Questions connexes