Procedura: inviare modifiche al databaseHow to: Submit Changes to the Database

Indipendentemente da quante modifiche si apportano agli oggetti, queste vengono applicate solo alle repliche in memoria.Regardless of how many changes you make to your objects, changes are made only to in-memory replicas. Le modifiche non vengono apportate ai dati effettivi nel databaseYou have made no changes to the actual data in the database. e non saranno trasmesse al server finché non si chiama in modo esplicito SubmitChanges su DataContext.Your changes are not transmitted to the server until you explicitly call SubmitChanges on the DataContext.

Quando si effettua questa chiamata, DataContext tenta di convertire le modifiche in comandi SQL equivalenti.When you make this call, the DataContext tries to translate your changes into equivalent SQL commands. È possibile utilizzare la logica personalizzata per eseguire l'override di queste azioni, ma l'ordine di invio viene gestito da un servizio del DataContext noti come il processore delle modifiche.You can use your own custom logic to override these actions, but the order of submission is orchestrated by a service of the DataContext known as the change processor. Di seguito viene riportata la sequenza degli eventi:The sequence of events is as follows:

  1. Quando si chiama SubmitChanges, LINQ to SQLLINQ to SQL esamina il set di oggetti conosciuti per determinare se a tali oggetti sono state associate nuove istanze.When you call SubmitChanges, LINQ to SQLLINQ to SQL examines the set of known objects to determine whether new instances have been attached to them. In caso affermativo, queste nuove istanze vengono aggiunte al set di oggetti registrati.If they have, these new instances are added to the set of tracked objects.

  2. Tutti gli oggetti con modifiche in sospeso vengono ordinati in una sequenza di oggetti in base alle reciproche dipendenze.All objects that have pending changes are ordered into a sequence of objects based on the dependencies between them. Gli oggetti le cui modifiche dipendono da altri oggetti vengono ordinati in sequenza dopo le relative dipendenze.Objects whose changes depend on other objects are sequenced after their dependencies.

  3. Immediatamente prima della trasmissione di una qualsiasi modifica effettiva, LINQ to SQLLINQ to SQL avvia una transazione per incapsulare la serie di singoli comandi.Immediately before any actual changes are transmitted, LINQ to SQLLINQ to SQL starts a transaction to encapsulate the series of individual commands.

  4. Le modifiche agli oggetti vengono convertite una alla volta in comandi SQL e inviate al server.The changes to the objects are translated one by one to SQL commands and sent to the server.

Qualsiasi errore rilevato dal database in questa fase causa l'interruzione del processo di invio e la generazione di un'eccezione.At this point, any errors detected by the database cause the submission process to stop, and an exception is raised. Viene eseguito il rollback di tutte le modifiche al database come se non fosse mai stato eseguito alcun invio.All changes to the database are rolled back as if no submissions ever occurred. In DataContext è tuttavia ancora presente una registrazione completa di tutte le modifiche,The DataContext still has a full recording of all changes. pertanto è possibile tentare di correggere il problema e chiamare nuovamente SubmitChanges, come nell'esempio di codice che segue.You can therefore try to correct the problem and call SubmitChanges again, as in the code example that follows.

EsempioExample

Quando la transazione relativa alla sottomissione viene completata correttamente, DataContext accetta le modifiche agli oggetti ignorando le informazioni di rilevamento delle modifiche.When the transaction around the submission is completed successfully, the DataContext accepts the changes to the objects by ignoring the change-tracking information.

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

Vedere ancheSee Also

Procedura: rilevare e risolvere gli invii in conflittoHow to: Detect and Resolve Conflicting Submissions
Procedura: gestire i conflitti di modificheHow to: Manage Change Conflicts
Download di database di esempioDownloading Sample Databases
Creazione e invio di modifiche dei datiMaking and Submitting Data Changes