Como: Enviar alterações para o banco de dados
Independentemente de quantas alterações você fizer em seus objetos, as alterações são feitas apenas em réplicas na memória. Você não fez alterações nos dados reais no banco de dados. Suas alterações não são transmitidas ao servidor até que você chame SubmitChanges explicitamente o DataContext.
Quando você faz essa chamada, o DataContext tenta traduzir suas alterações em comandos SQL equivalentes. Você pode usar sua própria lógica personalizada para substituir essas ações, mas a ordem de envio é orquestrada por um serviço conhecido DataContext como processador de alterações. A sequência de eventos é a seguinte:
Quando você chama SubmitChangeso , o LINQ to SQL examina o conjunto de objetos conhecidos para determinar se novas instâncias foram anexadas a eles. Se tiverem, essas novas instâncias serão adicionadas ao conjunto de objetos rastreados.
Todos os objetos com alterações pendentes são ordenados em uma sequência de objetos com base nas dependências entre eles. Os objetos cujas alterações dependem de outros objetos são sequenciados após suas dependências.
Imediatamente antes de quaisquer alterações reais serem transmitidas, o LINQ to SQL inicia uma transação para encapsular a série de comandos individuais.
As alterações nos objetos são traduzidas uma a uma para comandos SQL e enviadas para o servidor.
Neste ponto, quaisquer erros detetados pelo banco de dados fazem com que o processo de envio seja interrompido e uma exceção é gerada. Todas as alterações no banco de dados são revertidas como se nenhum envio tivesse ocorrido. O DataContext ainda tem um registro completo de todas as alterações. Portanto, você pode tentar corrigir o problema e chamar SubmitChanges novamente, como no exemplo de código a seguir.
Exemplo
Quando a transação em torno do envio é concluída com êxito, o DataContext aceita as alterações nos objetos ignorando as informações de controle de alterações.
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
// Make changes here.
try
{
db.SubmitChanges();
}
catch (ChangeConflictException e)
{
Console.WriteLine(e.Message);
// Make some adjustments.
// ...
// Try again.
db.SubmitChanges();
}
Dim db As New Northwnd("c:\northwnd.mdf")
' Make changes here.
Sub MakeChanges()
Try
db.SubmitChanges()
Catch e As ChangeConflictException
Console.WriteLine(e.Message)
' Make some adjustments
'...
' Try again.
db.SubmitChanges()
End Try
End Sub