Dela via


Gör så här: Skicka ändringar till databasen

Oavsett hur många ändringar du gör i dina objekt görs ändringar endast i minnesinterna repliker. Du har inte gjort några ändringar i de faktiska data i databasen. Ändringarna överförs inte till servern förrän du uttryckligen anropar SubmitChangesDataContext.

När du gör det här anropet DataContext försöker du översätta ändringarna till motsvarande SQL-kommandon. Du kan använda din egen anpassade logik för att åsidosätta dessa åtgärder, men överföringsordningen orkestreras av en tjänst DataContext som kallas ändringsprocessorn. Händelseserien är följande:

  1. När du anropar SubmitChangesundersöker LINQ till SQL uppsättningen med kända objekt för att avgöra om nya instanser har kopplats till dem. Om de har det läggs dessa nya instanser till i uppsättningen med spårade objekt.

  2. Alla objekt som har väntande ändringar sorteras i en sekvens med objekt baserat på beroendena mellan dem. Objekt vars ändringar är beroende av andra objekt sekvenseras efter deras beroenden.

  3. Omedelbart innan några faktiska ändringar överförs startar LINQ till SQL en transaktion för att kapsla in serien med enskilda kommandon.

  4. Ändringarna i objekten översätts en i taget till SQL-kommandon och skickas till servern.

I det här läget kan eventuella fel som identifieras av databasen göra att överföringsprocessen stoppas och ett undantag utlöses. Alla ändringar i databasen återställs som om inga inlämningar någonsin har gjorts. Fortfarande DataContext har en fullständig inspelning av alla ändringar. Du kan därför försöka åtgärda problemet och anropa SubmitChanges igen, som i kodexemplet som följer.

Exempel

När transaktionen runt överföringen har slutförts DataContext godkänner den ändringarna av objekten genom att ignorera ändringsspårningsinformationen.

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

Se även