Compartir a través de


Operaciones de inserción, actualización y eliminación (LINQ to SQL)

Actualización: November 2007

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 de 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 producirá una excepción. Para obtener más información, vea Cómo: Eliminar filas de la base de datos (LINQ to SQL).

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.

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()
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();

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, vea Responsabilidades del desarrollador en la invalidación del comportamiento predeterminado (LINQ to SQL).

Los desarrolladores de Visual Studio pueden usar el Diseñador relacional de objetos para desarrollar procedimientos almacenados con este propósito.

Vea también

Conceptos

Descargar bases de datos de ejemplo (LINQ to SQL)

Otros recursos

Personalizar operaciones de inserción, actualización y eliminación (LINQ to SQL)