Pregunta

Estoy tratando de guardar los cambios en un registro, sin embargo, recibo el error

Violación de la restricción de la clave primaria 'PK_TSTOREASSIGNMENT'. No se puede insertar la clave duplicada en el objeto 'Tassignment'. La instrucción se ha terminado.

Aquí está la consulta subsónica

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

'Modify the sequence
 current.ManualSequence = 999
 current.Save()
¿Fue útil?

Solución

Veo dos posibilidades para este error:

  • O ManualSequence es (parte de) la clave principal de TStoreAssignment, y ya tienes otra entrada con 999
  • o (probablemente) subsonic piensa current es un objeto nuevo y trata de insertarlo en lugar de actualizarlo cuando llame Save(). Puedes depurar y verificar el IsNewpropiedad. Si ese es el caso, puede llamar MarkOld() antes de Save método. O incluso mejor, usa algo como:

    DB.Update().From(Of TStoreAssignment)() _
        .Set(TStoreAssignment.ManualSequenceColumn).EqualTo(999) _
        .Where(TStoreAssignment.AssignementIDColumn).IsEqualTo(selectedRow.AssignmentID) _
        .Execute()
    
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top