domingo, 14 de octubre de 2012

Operaciones CRUD (Create, read, update and delete) con Linq

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

En el siguiente ejemplo 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");
C#
// Query para un cliente especifico.
var clien =
    (from x in db.Customers
     where x.CustomerID == "ALFKI"
     select x).First();

// Cambia el numero del contacto.
clien.ContactName = "New Contact";

// Crea y agrega una nueva orden a la coleccion de ordenes.
Order ord = new Order { OrderDate = DateTime.Now };
clien.Orders.Add(ord);

// Eliminar una orden existente.
Order ord0 = clien.Orders[0];

// Removiendola de la tabla tambien se remueve de la lista de usuarios.
db.Orders.DeleteOnSubmit(ord0);

// Llama al DataContext para guardar todos los cambios.
db.SubmitChanges();
Al llamar al metodo SubmitChanges(), LINQ to SQL genera y ejecuta automáticamente la cosulta SQL necesarios para volver a transmitir los cambios a la base de datos.