Compartilhar via


Como: enviar alterações para o banco de dados

Independentemente de quantas você faz alterações aos objetos, as alterações são feitas somente para réplicas de memória. Você não tiver nenhuma alteração nos dados reais na base de dados. Suas alterações não são passadas para o servidor até que você chama explicitamente SubmitChanges em DataContext.

Quando você fizer essa chamada, DataContext tenta converter suas alterações em comandos SQL equivalentes. Você pode usar sua própria lógica personalizada para substituir estas ações, mas a ordem de envio é orquestrado por um serviço DataContext conhecido como o processador de alteração. A sequência de eventos é a seguinte:

  1. Quando você chama SubmitChanges, o LINQ to SQL examina o conjunto de objetos conhecidos para determinar se as novas instâncias eles foram anexadas. Se eles tiverem, essas novas instâncias são adicionadas ao conjunto de objetos rastreadas.

  2. Todos os objetos que possuem durante alterações são ordenados em uma sequência de objetos com base nas dependências entre eles. Os objetos cujas ambas as alterações depende de outros objetos são arranjados seqüencialmente após as suas dependências.

  3. Imediatamente antes todas as alterações reais são passadas, o LINQ to SQL inicia uma transação para encapsular a série de comandos individuais.

  4. As alterações para os objetos são traduzidas um por um para comandos SQL e enviadas ao servidor.

Neste ponto, todos os erros detectados por base de dados fazem com que o processo de envio parar, e uma exceção é gerada. Todas as alterações a base de dados são revertidas como se nenhuma envio ocorreu nunca. DataContext ainda tem uma gravação completa de todas as alterações. Portanto você pode tentar corrigir o problema e chamar novamente SubmitChanges , como no exemplo de código que segue.

Exemplo

Quando a transação em torno do envio é concluída com êxito, DataContext aceita as alterações aos 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

Confira também