Operaciones de actualización, inserción y eliminación
En LINQ to SQL, las operaciones Insert
, Update
y Delete
se realizan agregando, cambiando y quitando objetos en el modelo de objetos. De forma predeterminada, LINQ to SQL convierte estas acciones a SQL y envía los cambios a la base de datos.
LINQ to SQL proporciona la máxima flexibilidad para manipular y conservar los cambios realizados en los objetos. En cuanto están disponibles los objetos entidad (ya sea recuperándolos a través de una consulta o construyéndolos nuevamente), puede cambiarlos como los objetos normales de la aplicación. Es decir, puede cambiar sus valores, agregarlos a las colecciones y quitarlos de las mismas. LINQ to SQL realiza un seguimiento de los cambios y está listo para volver a transmitirlos a la base de datos cuando llame al método SubmitChanges.
Nota
LINQ to SQL no admite ni reconoce las operaciones de eliminación en cascada. Si desea eliminar una fila de una tabla que tiene restricciones, deberá establecer la regla ON DELETE CASCADE
en la restricción FOREIGN KEY de la base de datos o bien utilizar su propio código para eliminar primero los objetos secundarios que impiden que se elimine el objeto primario. De lo contrario, se inicia una excepción. Para obtener más información, consulte Cómo: Eliminar filas de la base de datos.
En los siguientes extractos se utilizan las clases Customer
y Order
de la base de datos de ejemplo Northwind. Para no extendernos demasiado, no incluimos las definiciones de clase.
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()
Al llamar a SubmitChanges, LINQ to SQL genera y ejecuta automáticamente los comandos SQL necesarios para volver a transmitir los cambios a la base de datos.
Nota
Puede invalidar este comportamiento utilizando su propia lógica personalizada, normalmente mediante un procedimiento almacenado. Para obtener más información, consulte Responsabilidades del desarrollador al invalidar un comportamiento predeterminado.
Los desarrolladores que usan Visual Studio pueden usar Object Relational Designer para desarrollar procedimientos almacenados con este objetivo.