Megosztás a következőn keresztül:


Útmutató: Módosítások elküldése az adatbázisba

Függetlenül attól, hogy hány módosítást végez az objektumokon, a módosítások csak a memórián belüli replikákon történnek. Nem módosította az adatbázisban lévő tényleges adatokat. A módosítások csak akkor kerülnek továbbításra a kiszolgálóra, ha kifejezetten meghívja SubmitChanges a kiszolgálót DataContext.

A hívás során a DataContext rendszer megpróbálja a módosításokat egyenértékű SQL-parancsokra lefordítani. A műveletek felülbírálásához használhatja a saját egyéni logikáját, de a beküldés sorrendjét az DataContext úgynevezett változásfeldolgozó egy szolgáltatása vezényli. Az események sorrendje a következő:

  1. Híváskor SubmitChangesa LINQ az SQL-hez megvizsgálja az ismert objektumok készletét annak megállapításához, hogy új példányok lettek-e hozzájuk csatolva. Ha vannak ilyenek, ezeket az új példányokat a rendszer hozzáadja a követett objektumok készletéhez.

  2. A függőben lévő módosításokat tartalmazó objektumok mindegyike objektumsorozatba van rendezve a közöttük lévő függőségek alapján. Azok az objektumok, amelyek változásai más objektumoktól függnek, a függőségek után sorrendbe kerülnek.

  3. Közvetlenül a tényleges módosítások továbbítása előtt a LINQ az SQL-be elindít egy tranzakciót az egyes parancsok sorozatának beágyazásához.

  4. Az objektumok módosításait a rendszer egyenként lefordítja az SQL-parancsokra, és elküldi a kiszolgálónak.

Ezen a ponton az adatbázis által észlelt hibák miatt a beküldési folyamat leáll, és kivétel keletkezik. Az adatbázis minden módosítása vissza lesz állítva, mintha soha nem történt volna beküldés. A DataContext módosítások teljes felvétele továbbra is folyamatban van. Ezért megpróbálhatja kijavítani a problémát, és újra meghívni SubmitChanges , ahogy az alábbi kód példában is látható.

Példa

Ha a beküldés körüli tranzakció sikeresen befejeződött, a DataContext változáskövetési információk figyelmen kívül hagyásával elfogadja az objektumok módosításait.

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

Lásd még