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: