J'ai une application (ASP.NET 3.5) qui permet aux utilisateurs de relancer un processus particulier si nécessaire. Le processus insère des enregistrements dans une table MS SQL. J'ai l'insertion dans un Try/Catch et ignore la capture si un enregistrement existe déjà (l'erreur dans le titre serait valide). Cela a fonctionné parfaitement en utilisant ADO mais après avoir été convoqué à LINQ, j'ai remarqué une chose intéressante. Si lors d'une nouvelle exécution du processus il y avait déjà des enregistrements dans la table, tous les nouveaux enregistrements seraient rejetés avec la même erreur, même s'il n'y avait aucun enregistrement existant. Le code est le suivant:LINQ: Impossible d'insérer la ligne clé dans l'objet « dbo.tblOutstandingCompletions » avec index unique
Dim ins = New tblOutstandingCompletion
With ins
.ControlID = rec.ControlID
.PersonID = rec.peopleID
.RequiredDate = rec.NextDue
.RiskNumber = 0
.recordType = "PC"
.TreatmentID = 0
End With
Try
ldb.tblOutstandingCompletions.InsertOnSubmit(ins)
ldb.SubmitChanges()
Catch ex As Exception
' An attempt to load a duplicate record will fail
End Try
DataContext pour la base de données a été créée au cours de chargement de la page.
je résolu le problème en redéfinissant le DataContext avant chaque insertion:
ldb = New CaRMSDataContext(sessionHandler.connection.ToString)
Dim ins = New tblOutstandingCompletion
Bien que j'ai résolu le problème que je voudrais savoir si quelqu'un peut l'expliquer. Sans la redéfinition DataContext, l'application fonctionne parfaitement s'il n'y a pas d'enregistrements en double.
Cordialement James
Quelle est votre clé primaire sur la table? On dirait que vous insérez le disque deux fois au cours d'une demande ... – Will
La clé primaire est un entier avec IsIdentity spécifié. L'autre index du fichier est constitué de 5 champs.Les enregistrements qui tentaient d'être ajoutés étaient définitivement uniques. J'ai essayé la même application sur deux versions différentes de la db avec des données très différentes et j'ai obtenu le même résultat. –