Question

J'essaie d'enregistrer les modifications apportées à un enregistrement, mais j'obtiens l'erreur

Violation de la contrainte PRIMARY KEY «PK_TStoreAssignment».Impossible d'insérer dupliquer la clé dans l'objet 'TAssignment'. La déclaration a été terminée.

Voici la requête subsonique

Dim current = DB.Select().From(TStoreAssignment.Schema) _
                                 .Where("assignmentID").IsEqualTo(selectedRow.AssignmentID) _
                                 .ExecuteSingle(Of TStoreAssignment)()

'Modify the sequence
 current.ManualSequence = 999
 current.Save()
Était-ce utile?

La solution

Je vois deux possibilités pour cette erreur:

  • Soit ManualSequence fait (partie de) la clé primaire de TStoreAssignment, et vous avez déjà une autre entrée avec 999
  • ou (probablement) SubSonic pense que current est un nouvel objet et essaie de l'insérer au lieu de le mettre à jour lorsque vous appelez Save().Vous pouvez déboguer et vérifier la propriété IsNew.Si tel est le cas, vous pouvez appeler MarkOld() avant la méthode Save.Ou mieux encore, utilisez quelque chose comme:

    DB.Update().From(Of TStoreAssignment)() _
        .Set(TStoreAssignment.ManualSequenceColumn).EqualTo(999) _
        .Where(TStoreAssignment.AssignementIDColumn).IsEqualTo(selectedRow.AssignmentID) _
        .Execute()
    
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top