Linq Delete seguita da Insert

Nel caso in cui in Linq si inteda eliminare un record e poi in seguito ad una elaborazione aggiungerlo nuovamente occorre invocare il metodo SubmitChanges dopo la DeleteOnSubmit e prima della InsertOnSubmit altrimenti la Delete non verrà eseguita sul database.

Si consideri questo codice:

  ‘Eliminazione elaborazione utente
  Dim elaborazione As ProgrammazioneProduzione.Elaborazioni = _
    (From r In Me.dcProgrammazione.Elaborazionis _
      Where r.Utente = System.Environment.UserName).FirstOrDefault()

  If elaborazione IsNot Nothing Then
      Me.dcProgrammazione.Elaborazionis.DeleteOnSubmit(elaborazione)
      Me.dcProgrammazione.SubmitChanges()
   End If

   ‘Inserimento elaborazione
   elaborazione = New ProgrammazioneProduzione.Elaborazioni With _
      {.Utente = System.Environment.UserName, .Data = Now, _
       .Computer = System.Environment.MachineName}
    Me.dcProgrammazione.Elaborazionis.InsertOnSubmit(elaborazione)

   
    Me.dcProgrammazione.SubmitChanges()

Ovviamente per rendere atomica l’operazione sul DB è posibile racchiudere il codice in una transazione

Using ts As New Transactions.TransactionScope

    ‘Eliminazione elaborazione utente
    Dim elaborazione As ProgrammazioneProduzione.Elaborazioni = _
      (From r In Me.dcProgrammazione.Elaborazionis _
       Where r.Utente = System.Environment.UserName).FirstOrDefault()

    If elaborazione IsNot Nothing Then
        Me.dcProgrammazione.Elaborazionis.DeleteOnSubmit(elaborazione)
        Me.dcProgrammazione.SubmitChanges()
    End If

                ‘Inserimento elaborazione
    elaborazione = New ProgrammazioneProduzione.Elaborazioni With _
      {.Utente = System.Environment.UserName, .Data = Now, _
       .Computer = System.Environment.MachineName}
    Me.dcProgrammazione.Elaborazionis.InsertOnSubmit(elaborazione)

    ‘Invio modifiche
    Me.dcProgrammazione.SubmitChanges()

    ‘Commit della transazione
    ts.Complete()
End Using

A riguardo si vedano: