Sdílet prostřednictvím


Operace vložení, aktualizace a odstranění

Operace a Delete operace v LINQ to SQL provádíte InsertUpdatepřidáním, změnou a odebráním objektů v objektového modelu. LinQ to SQL ve výchozím nastavení přeloží vaše akce do SQL a odešle změny do databáze.

LINQ to SQL nabízí maximální flexibilitu při manipulaci s objekty a zachování změn provedených u objektů. Jakmile jsou objekty entit k dispozici (buď jejich načtením pomocí dotazu, nebo jejich vytvořením znovu), můžete je změnit jako typické objekty ve vaší aplikaci. To znamená, že můžete změnit jejich hodnoty, přidat je do kolekcí a odebrat je z kolekcí. LINQ to SQL sleduje vaše změny a je připraven je přenést zpět do databáze při volání SubmitChanges.

Poznámka:

LINQ to SQL nepodporuje ani nerozpozná operace kaskádového odstranění. Pokud chcete odstranit řádek v tabulce s omezeními, musíte buď nastavit ON DELETE CASCADE pravidlo v omezení cizího klíče v databázi, nebo pomocí vlastního kódu nejprve odstranit podřízené objekty, které brání odstranění nadřazeného objektu. V opačném případě je vyvolána výjimka. Další informace naleznete v tématu Postupy: Odstranění řádků z databáze.

Následující výňatky používají Customer ukázkovou databázi Northwind a Order třídy. Definice tříd nejsou zobrazeny pro stručnost.

Northwnd db = new Northwnd(@"c:\Northwnd.mdf");

// Query for a specific customer.
var cust =
    (from c in db.Customers
     where c.CustomerID == "ALFKI"
     select c).First();

// Change the name of the contact.
cust.ContactName = "New Contact";

// Create and add a new Order to the Orders collection.
Order ord = new Order { OrderDate = DateTime.Now };
cust.Orders.Add(ord);

// Delete an existing Order.
Order ord0 = cust.Orders[0];

// Removing it from the table also removes it from the Customer’s list.
db.Orders.DeleteOnSubmit(ord0);

// Ask the DataContext to save all the changes.
db.SubmitChanges();
Dim db As New Northwnd("…\Northwnd.mdf")

Dim cust As Customer = _
(From c In db.Customers _
 Where c.CustomerID = "ALFKI" _
 Select c) _
.First()

' Change the name of the contact.
cust.ContactName = "New Contact"

' Create and add a new Order to Orders collection.
Dim ord As New Order With {.OrderDate = DateTime.Now}
cust.Orders.Add(ord)

' Delete an existing Order.
Dim ord0 As Order = cust.Orders(0)

' Removing it from the table also removes it from 
' the Customer’s list.
db.Orders.DeleteOnSubmit(ord0)

' Ask the DataContext to save all the changes.
db.SubmitChanges()

Při volání SubmitChangeslinQ to SQL automaticky vygeneruje a spustí příkazy SQL, které musí mít k přenosu změn zpět do databáze.

Poznámka:

Toto chování můžete přepsat pomocí vlastní logiky, obvykle prostřednictvím uložené procedury. Další informace najdete v tématu Odpovědnosti vývojáře při přepsání výchozího chování.

Vývojáři, kteří používají Visual Studio, můžou k vývoji uložených procedur pro tento účel použít Návrhář relací objektů.

Viz také