SlideShare una empresa de Scribd logo
LINQ to SQL (Parte 6 – Obtener datos con procedimientos almacenados) 
9 respuestas 
En las últimas semanas he escrito una serie de post sobre LINQ to SQL. Es un ORM integrado en .NET 3.5, y nos permite modelar bases de datos relacionales con clases de .NET. Podemos usar expresiones LINQ para consultar a la base de datos, actualiazarla, insertar y borrar datos. 
Aquí tenéis los enlaces a los otros post: 
 Parte 1: Introducción a LINQ to SQL 
 Parte 2: Definiendo el modelo de datos. 
 Parte 3: Consultando la base de datos 
 Parte 4: Actualizando la base de datos. 
 Parte 5: Enlazar controles de interfaz de usuario con el ASP:LinqDatSource 
En estos posts vimos cómo usar expresiones LINQ para obtener programáticamente datos de la base de datos. 
En el post de hoy veremos cómo podemos usar los procedimientos almacenados (SPROCs) y las funciones definidas por el usuario (UDFs) con nuestro modelo LINQ to SQL. El post de hoy veremos el caso de los SPROCs para consultar y obtener datos de la base de datos. En el siguiente post de esta serie veremos cómo actualizar/insertar/borrar datos con SPROCs. 
¿SPROC o no SPROC? Esa es la cuestión 
La pregunta sobre cuando usar el SQL dinámico generado por un ORM en lugar de procedimientos almacenados creando una capa de datos es causa de debates muy acalorados entre desarrolladores, arquitectos y DBAs. Mucha gente más lista que yo ha escrito sobre esto, así que no me decantaré ni por un lado ni por otro. 
LINQ to SQL es muy flexible, y puede usare para crear un modelo de datos cuyos objetos sean independientes del esquema de la base de datos, y puede encapsular lógica de negocio y reglas de validación que funcionan tanto si se usa SQL generado dinámicamente o a través de SPROCs. 
En el tercer post de esta serie, hablamos sobre cómo podemos escribir expresiones LINQ contra el modelo de LINQ to SQL como el siguiente código: 
Cuando escribimos expresiones LINQ como esta, LINQ to SQL ejecutará el SQL dinámico necesario para obtener los objetos de Product que cumplan las restricciones.
Como aprenderemos en este post, también podemos mapear SPROCs en la base de datos con la clase DataContext generada por LINQ to SQL, que nos permitirá obtener los mismo objetos de Product llamando a un procedimiento almacenado: 
Esta habilidad de poder usar tanto SQL dinámico como SPROCs con una capa de datos limpia es muy útil y nos permite una gran flexibilidad en nuestros proyectos. 
Pasos para mapear y llamar a SPROC con LINQ to SQL 
En el segundo post de la serie vimos cómo usar el diseñador LINQ to SQL para crear el siguiente modelo de clases:
Fijaos en las dos partes del diseñador. La de la izquierda nos permite definir el modelo de datos que mapeara nuestra base de datos. El de la derecha nos permite mapear SPROCs (y UDFs) en nuestro objeto DataContext, que podemos usar en lugar del SQL dinámico para trabajar con los objetos de nuestro modelo de datos. 
Cómo mapear un SPROC en un DataContext de LINQ to SQL 
Para mapear SPROCs en la clase DataContext, vamos primero al explorador de servidores de VS 2008 y miramos a los SPROCs de nuestra base de datos:
Haciendo doble clic en cualquier SPROC se abrirá para edición y podremos ver el código. Por ejemplo, aquí tenéis el SPROC "CustOrderHist" de la base de datos Northwind: 
Para mapearlo en nuestra clase DataContext, lo arrastarmos y soltamos desde el explorador de servidores al diseñador de LINQ to SQL. Automáticamente se creará un nuevo método en la clase DataContext:
Por defecto el nombre del nuevo método en la clase DataContext será el mismo que el del SPROC, y el tipo de datos devueltos se creará automáticamente con el siguiente patron: "[NombredelSPROC]Result". Por ejemplo: el SPROC de arriba devolverá una secuencia de objetos del tipo "CustOrderHistResult". Podemos cambiar el nombre del método seleccionándolo en el diseñador y cambiarlo en la ventana de propiedades. 
Como llamar a un nuevo SPROC mapeado. 
Una vez que hemos seguido los pasos para mapear el SPROC en la clase DataContext, es muy fácil de usar. Todo lo que tenemos que hacer es llamarlo para obtener los resultados fuertemente tipados: 
En VB: 
En C#:
Además de poder hacer un bucle sobre los resultados, también podemos enlazar los resultados con cualquier control para mostrarlos. Por ejemplo, el siguiente código enlaza los resultados del SPROC a un control <asp:gridview> 
Con lo que mostramos la historia de productos de un cliente: 
Mapeando los tipos resultado de los SPROC del modelo de datos 
En el SPROC "CustOrderHist" devolvía una secuencia de objetos con dos columnas: el nombre del producto y el numero total de pedidos que el cliente ha hecho de ese producto. El diseñador LINQ to SQL definió la clase "CustOrderHistResult" para representar los resultados. 
También podemos decidir mapear los resultados del SPROC a una clase de nuestro modelo de datos (por ejemplo: a una entidad Product o Order).
Por ejemplo, tenemos el SPROC "GetProductsByCategory" en nuestra base de datos que devuelve la siguiente información: 
Como ántes podemos crear un método "GetProductsByCategory" en la clase DataContext que llama a este SPROC arrastrándolo al diseñador de LINQ to SQL. Más que simplemente arrastrar el SPROC al diseñador, lo arrastraremos encima de la clase "Product": 
Con esto, el método "GetProductsByCategory" devolverá una secuencia de objetos "Product":
LINQ to SQL seguirá los cambios hechos a los objetos que se devuelvan como si fuesen objetos Products obtenidos a partir de expresiones LINQ. Cuando llamemos al método "SubmitChanges()" todos los cambios hechos a esos objetos se guardarán en la base de datos. 
Por ejemplo, con el siguiente código obtenemos y cambiamos el precio de todos los productos de una categoría aumentándolo en un 90 %: 
Para entender cómo funciona el método SubmitChanges() y el seguimiento que se hace de los cambios, y ver cómo podemos añadir lógica de negocio a nuestro modelo de datos leed el cuarto post de esta serie. 
En el próximo post de esta serie veremos también cómo cambiar el SQL generado cuando insertamos/actualizamos/borramos datos con SPROCs personalizados. Lo bueno de todo esto es que el código anterior no habrá que cambiarlo si hemos configurado la clase DataContext para que use SPROCs para las actualizaciones - 
Manejando resultados múltiples desde SPROCs 
Cuando un procedimiento almacenado puede devolver varios tipos de datos, el tipo de resultado del SPROC en la clase DataContext no puede ser fuertemente tipado. Por ejemplo, imaginemos el siguiente SPROC que puede devolver un producto o un pedido dependiendo del parámetro de entrada:
LINQ to SQL permite crear métodos auxiliares para devolver Product o Order añadiendo una clase parcial "NorthwindDataContext" al proyecto que defina un método (que en este caso llamaremos "VariablesShapeSample") que invoca al SPROC y devuelve un objeto IMultipleResult: 
VB: 
C#:
Una vez que añadimos este método al proyecto podemos llamarlo y convetir los resultados tanto a una secuencia de Product como de Order: 
VB: 
C#: 
Soporte de funciones definidas por el usuario (UDFs) 
Además de SPROCS, LINQ to SQL también soporta tanto funciones de usuario de valores y de tablas de valores (UDFs). Una vez que añadimos un método a la clase DataContext, podemos usar estas funciones en nuestras consultas LINQ. 
Por ejemplo, veamos la función simple "MyUpperFunction":
Podemos arrastrar y soltar desde el explorador de servidores al diseñador de LINQ to SQL para añadirlo como un método a nuestro DataContext: 
Luego podemos usar esta función UDF en expresiones LINQ cuando escribimos consultas contra nuestro modelo LINQ to SQL: 
VB: 
C#: 
Si usamos el visualizador de debug de LINQ to SQL del que ya hablamos aquí, podemos ver cómo LINQ to SQL transforma la expresión anterior en una SQL que ejecutará el UDF en la base de datos en tiempo de ejecución:
Resumen 
LINQ to SQL soporta poder usar procedimientos almacenados y UDFs contra la base de datos y los integra en nuestro modelo de datos. En este post hemos visto cómo podemos usar SPROCs para obtener datos y pasarlo entre nuestras clases del modelo. En el próximo post veremos cómo podemos usar SPROCS para sobreescribir la lógica de actualización/inserción/borrado cuando llamamos a SubmitChanges() en el DataContext para guardar los cambios.

Más contenido relacionado

La actualidad más candente

desarrollo en 3 capas VB
desarrollo en 3 capas VBdesarrollo en 3 capas VB
desarrollo en 3 capas VB
Reynaldo Daza Avila
 
Aprenda a conectar sql y c# en 19 sencillos pasos!
Aprenda a conectar sql y c# en 19 sencillos pasos!Aprenda a conectar sql y c# en 19 sencillos pasos!
Aprenda a conectar sql y c# en 19 sencillos pasos!
Ziscko
 
CONEXION VISUAL STUDIO.NET - SQL SERVER
CONEXION VISUAL STUDIO.NET - SQL SERVERCONEXION VISUAL STUDIO.NET - SQL SERVER
CONEXION VISUAL STUDIO.NET - SQL SERVER
Darwin Durand
 
Informe 20% actividad 1 visual basic 6.0
Informe 20% actividad 1 visual basic 6.0Informe 20% actividad 1 visual basic 6.0
Informe 20% actividad 1 visual basic 6.0
EudoroSulbaran
 
ConexióN De Base De Datos
ConexióN De Base De DatosConexióN De Base De Datos
ConexióN De Base De Datos
Verenice Corea
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
José Antonio Sandoval Acosta
 
Conexión c# sql server
Conexión c# sql serverConexión c# sql server
Conexión c# sql server
LUZ ARIZPE
 
Preparestatement
PreparestatementPreparestatement
Preparestatement
Vicente Alberca
 
Proyecto replicacion con sql server
Proyecto replicacion con sql serverProyecto replicacion con sql server
Proyecto replicacion con sql server
edelveis
 
Practica sql i,ii
Practica sql i,iiPractica sql i,ii
Practica sql i,ii
Omar Salazar
 
Reportes con crystal reports
Reportes con crystal reportsReportes con crystal reports
Reportes con crystal reports
Kevin Alvarado
 
F004 p006-gfpi guia de aprendizaje 1-fundamentosde sql
F004 p006-gfpi guia de aprendizaje 1-fundamentosde sqlF004 p006-gfpi guia de aprendizaje 1-fundamentosde sql
F004 p006-gfpi guia de aprendizaje 1-fundamentosde sql
Miguel Amgo
 
Conexión a SQL Server con C#.NET a través de ODBC
Conexión a SQL Server con C#.NET a través de ODBCConexión a SQL Server con C#.NET a través de ODBC
Conexión a SQL Server con C#.NET a través de ODBC
Orlando Alemán
 
ConexióN De Una Base De Datos De Sql Con C#
ConexióN De Una Base De Datos De Sql Con C#ConexióN De Una Base De Datos De Sql Con C#
ConexióN De Una Base De Datos De Sql Con C#
LUZ ARIZPE
 
Como conectar visual basic 6.0 a una base de datos microsoft sql server
Como conectar visual basic 6.0 a una base de datos microsoft sql serverComo conectar visual basic 6.0 a una base de datos microsoft sql server
Como conectar visual basic 6.0 a una base de datos microsoft sql server
KarolaynCardozo1
 
Visual basic 2010 data por codigo
Visual basic 2010 data por codigoVisual basic 2010 data por codigo
Visual basic 2010 data por codigo
juan fernandez
 
manual visual basic 02
manual visual basic 02 manual visual basic 02
manual visual basic 02
Jhhoonnha Jimeru
 
Practica n tec arch
Practica n tec archPractica n tec arch
Practica n tec arch
yulianixita
 
Replicacion en SQLserver2008r2
Replicacion en  SQLserver2008r2Replicacion en  SQLserver2008r2
Replicacion en SQLserver2008r2
Stalin Eduardo Tusa Vitar
 
Base de datos desde vs6.0
Base de datos desde vs6.0Base de datos desde vs6.0
Base de datos desde vs6.0
CsarDurango
 

La actualidad más candente (20)

desarrollo en 3 capas VB
desarrollo en 3 capas VBdesarrollo en 3 capas VB
desarrollo en 3 capas VB
 
Aprenda a conectar sql y c# en 19 sencillos pasos!
Aprenda a conectar sql y c# en 19 sencillos pasos!Aprenda a conectar sql y c# en 19 sencillos pasos!
Aprenda a conectar sql y c# en 19 sencillos pasos!
 
CONEXION VISUAL STUDIO.NET - SQL SERVER
CONEXION VISUAL STUDIO.NET - SQL SERVERCONEXION VISUAL STUDIO.NET - SQL SERVER
CONEXION VISUAL STUDIO.NET - SQL SERVER
 
Informe 20% actividad 1 visual basic 6.0
Informe 20% actividad 1 visual basic 6.0Informe 20% actividad 1 visual basic 6.0
Informe 20% actividad 1 visual basic 6.0
 
ConexióN De Base De Datos
ConexióN De Base De DatosConexióN De Base De Datos
ConexióN De Base De Datos
 
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
Programacion de base de datos - Unidad 1: Conexion a la base de datos con un ...
 
Conexión c# sql server
Conexión c# sql serverConexión c# sql server
Conexión c# sql server
 
Preparestatement
PreparestatementPreparestatement
Preparestatement
 
Proyecto replicacion con sql server
Proyecto replicacion con sql serverProyecto replicacion con sql server
Proyecto replicacion con sql server
 
Practica sql i,ii
Practica sql i,iiPractica sql i,ii
Practica sql i,ii
 
Reportes con crystal reports
Reportes con crystal reportsReportes con crystal reports
Reportes con crystal reports
 
F004 p006-gfpi guia de aprendizaje 1-fundamentosde sql
F004 p006-gfpi guia de aprendizaje 1-fundamentosde sqlF004 p006-gfpi guia de aprendizaje 1-fundamentosde sql
F004 p006-gfpi guia de aprendizaje 1-fundamentosde sql
 
Conexión a SQL Server con C#.NET a través de ODBC
Conexión a SQL Server con C#.NET a través de ODBCConexión a SQL Server con C#.NET a través de ODBC
Conexión a SQL Server con C#.NET a través de ODBC
 
ConexióN De Una Base De Datos De Sql Con C#
ConexióN De Una Base De Datos De Sql Con C#ConexióN De Una Base De Datos De Sql Con C#
ConexióN De Una Base De Datos De Sql Con C#
 
Como conectar visual basic 6.0 a una base de datos microsoft sql server
Como conectar visual basic 6.0 a una base de datos microsoft sql serverComo conectar visual basic 6.0 a una base de datos microsoft sql server
Como conectar visual basic 6.0 a una base de datos microsoft sql server
 
Visual basic 2010 data por codigo
Visual basic 2010 data por codigoVisual basic 2010 data por codigo
Visual basic 2010 data por codigo
 
manual visual basic 02
manual visual basic 02 manual visual basic 02
manual visual basic 02
 
Practica n tec arch
Practica n tec archPractica n tec arch
Practica n tec arch
 
Replicacion en SQLserver2008r2
Replicacion en  SQLserver2008r2Replicacion en  SQLserver2008r2
Replicacion en SQLserver2008r2
 
Base de datos desde vs6.0
Base de datos desde vs6.0Base de datos desde vs6.0
Base de datos desde vs6.0
 

Destacado

Como relacionar tablas de una base de datos
Como relacionar tablas de una base de datosComo relacionar tablas de una base de datos
Como relacionar tablas de una base de datos
lenin_tandalia
 
Curso de SQL Server: implementacion (T-SQL)
Curso de SQL Server: implementacion (T-SQL)Curso de SQL Server: implementacion (T-SQL)
Curso de SQL Server: implementacion (T-SQL)
Salvador Ramos
 
Bases de datos locales
Bases de datos localesBases de datos locales
Bases de datos locales
Jose Angel Lopez Mendez
 
Creación de tablas en SQL Server
Creación de tablas en SQL ServerCreación de tablas en SQL Server
Creación de tablas en SQL Server
narkamo3
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
iluijo
 
Creación de tablas y relaciones en MySQL y SQL yog
Creación de tablas y relaciones en MySQL y SQL yogCreación de tablas y relaciones en MySQL y SQL yog
Creación de tablas y relaciones en MySQL y SQL yog
Jair Ospino Ardila
 
Creación de tablas y relaciones en MySQL y wamp server
Creación de tablas y relaciones en MySQL y  wamp serverCreación de tablas y relaciones en MySQL y  wamp server
Creación de tablas y relaciones en MySQL y wamp server
Jair Ospino Ardila
 
Procedimientos almacenados en MySQL
Procedimientos almacenados en MySQLProcedimientos almacenados en MySQL
Procedimientos almacenados en MySQL
Miguel Angel Rivera Robledo
 
Tablas, Codigos De Base De Datos
Tablas, Codigos De Base De DatosTablas, Codigos De Base De Datos
Tablas, Codigos De Base De Datos
guesta050b04
 
Base de datos simples
Base de datos simplesBase de datos simples
Base de datos simples
Blanca Elia Jiménez Guzmán
 
Codigo para crear la base de datos
Codigo para crear la base de datosCodigo para crear la base de datos
Codigo para crear la base de datos
Alvaro Cardona
 
Consultas base de datos en SQL
Consultas base de datos en SQLConsultas base de datos en SQL
Consultas base de datos en SQL
Cristian Salazar C.
 

Destacado (12)

Como relacionar tablas de una base de datos
Como relacionar tablas de una base de datosComo relacionar tablas de una base de datos
Como relacionar tablas de una base de datos
 
Curso de SQL Server: implementacion (T-SQL)
Curso de SQL Server: implementacion (T-SQL)Curso de SQL Server: implementacion (T-SQL)
Curso de SQL Server: implementacion (T-SQL)
 
Bases de datos locales
Bases de datos localesBases de datos locales
Bases de datos locales
 
Creación de tablas en SQL Server
Creación de tablas en SQL ServerCreación de tablas en SQL Server
Creación de tablas en SQL Server
 
Procedimientos Almacenados
Procedimientos AlmacenadosProcedimientos Almacenados
Procedimientos Almacenados
 
Creación de tablas y relaciones en MySQL y SQL yog
Creación de tablas y relaciones en MySQL y SQL yogCreación de tablas y relaciones en MySQL y SQL yog
Creación de tablas y relaciones en MySQL y SQL yog
 
Creación de tablas y relaciones en MySQL y wamp server
Creación de tablas y relaciones en MySQL y  wamp serverCreación de tablas y relaciones en MySQL y  wamp server
Creación de tablas y relaciones en MySQL y wamp server
 
Procedimientos almacenados en MySQL
Procedimientos almacenados en MySQLProcedimientos almacenados en MySQL
Procedimientos almacenados en MySQL
 
Tablas, Codigos De Base De Datos
Tablas, Codigos De Base De DatosTablas, Codigos De Base De Datos
Tablas, Codigos De Base De Datos
 
Base de datos simples
Base de datos simplesBase de datos simples
Base de datos simples
 
Codigo para crear la base de datos
Codigo para crear la base de datosCodigo para crear la base de datos
Codigo para crear la base de datos
 
Consultas base de datos en SQL
Consultas base de datos en SQLConsultas base de datos en SQL
Consultas base de datos en SQL
 

Similar a Linq to sql 6

Linq to sql 4
Linq to sql 4Linq to sql 4
Linq to sql 4
jcfarit
 
Linq to sql 2
Linq to sql 2Linq to sql 2
Linq to sql 2
jcfarit
 
Linq to sql 9
Linq to sql 9Linq to sql 9
Linq to sql 9
jcfarit
 
Ejemplo Linq To SQL
Ejemplo Linq To SQLEjemplo Linq To SQL
Ejemplo Linq To SQL
jcfarit
 
ejemplo de diseño
ejemplo de diseñoejemplo de diseño
ejemplo de diseño
Santiago Torres
 
DAM-S7.pptx
DAM-S7.pptxDAM-S7.pptx
Guia herramientas de bd
Guia herramientas de bdGuia herramientas de bd
Guia herramientas de bd
lissette_torrealba
 
Guía herramientas de BD PHP
Guía herramientas de BD PHPGuía herramientas de BD PHP
Guía herramientas de BD PHP
lissette_torrealba
 
5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web
Luis Fernando Aguas Bucheli
 
Java con base de datos
Java con base  de datosJava con base  de datos
Java con base de datos
jhersi saavedra garcia
 
10 Guía_Fundamentos de Base de Datos.docx
10 Guía_Fundamentos de Base de Datos.docx10 Guía_Fundamentos de Base de Datos.docx
10 Guía_Fundamentos de Base de Datos.docx
LeydyVeronicaDelgado
 
Mvc
MvcMvc
Jquery Hmvc
Jquery HmvcJquery Hmvc
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corporacion de Industrias Tecnologicas S.A.
 
Dprn3 u3 a1_rahv
Dprn3 u3 a1_rahvDprn3 u3 a1_rahv
Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gio
Robert Wolf
 
5-Unidad 2: Diseños de Vista-2.2 Para Web
5-Unidad 2: Diseños de Vista-2.2 Para Web5-Unidad 2: Diseños de Vista-2.2 Para Web
5-Unidad 2: Diseños de Vista-2.2 Para Web
Luis Fernando Aguas Bucheli
 
Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012
Antonio Ortiz
 
[UNED2016] Practica 1 - Biblioteca mockito
[UNED2016] Practica 1 - Biblioteca mockito[UNED2016] Practica 1 - Biblioteca mockito
[UNED2016] Practica 1 - Biblioteca mockito
Jose Barba Martinez
 
Dprn3 u3 a1_vims
Dprn3 u3 a1_vimsDprn3 u3 a1_vims
Dprn3 u3 a1_vims
VictorManuelSaldaSan
 

Similar a Linq to sql 6 (20)

Linq to sql 4
Linq to sql 4Linq to sql 4
Linq to sql 4
 
Linq to sql 2
Linq to sql 2Linq to sql 2
Linq to sql 2
 
Linq to sql 9
Linq to sql 9Linq to sql 9
Linq to sql 9
 
Ejemplo Linq To SQL
Ejemplo Linq To SQLEjemplo Linq To SQL
Ejemplo Linq To SQL
 
ejemplo de diseño
ejemplo de diseñoejemplo de diseño
ejemplo de diseño
 
DAM-S7.pptx
DAM-S7.pptxDAM-S7.pptx
DAM-S7.pptx
 
Guia herramientas de bd
Guia herramientas de bdGuia herramientas de bd
Guia herramientas de bd
 
Guía herramientas de BD PHP
Guía herramientas de BD PHPGuía herramientas de BD PHP
Guía herramientas de BD PHP
 
5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web5-Unidad 2: Diseño de Vista-2.2 Para Web
5-Unidad 2: Diseño de Vista-2.2 Para Web
 
Java con base de datos
Java con base  de datosJava con base  de datos
Java con base de datos
 
10 Guía_Fundamentos de Base de Datos.docx
10 Guía_Fundamentos de Base de Datos.docx10 Guía_Fundamentos de Base de Datos.docx
10 Guía_Fundamentos de Base de Datos.docx
 
Mvc
MvcMvc
Mvc
 
Jquery Hmvc
Jquery HmvcJquery Hmvc
Jquery Hmvc
 
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
 
Dprn3 u3 a1_rahv
Dprn3 u3 a1_rahvDprn3 u3 a1_rahv
Dprn3 u3 a1_rahv
 
Tema 15 aplicaciones de dos capas por gio
Tema 15   aplicaciones de dos capas por gioTema 15   aplicaciones de dos capas por gio
Tema 15 aplicaciones de dos capas por gio
 
5-Unidad 2: Diseños de Vista-2.2 Para Web
5-Unidad 2: Diseños de Vista-2.2 Para Web5-Unidad 2: Diseños de Vista-2.2 Para Web
5-Unidad 2: Diseños de Vista-2.2 Para Web
 
Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012Bases de Datos Distribuidas con Sql Server 2012
Bases de Datos Distribuidas con Sql Server 2012
 
[UNED2016] Practica 1 - Biblioteca mockito
[UNED2016] Practica 1 - Biblioteca mockito[UNED2016] Practica 1 - Biblioteca mockito
[UNED2016] Practica 1 - Biblioteca mockito
 
Dprn3 u3 a1_vims
Dprn3 u3 a1_vimsDprn3 u3 a1_vims
Dprn3 u3 a1_vims
 

Más de jcfarit

Conceptos basicos de telefonia
Conceptos basicos de telefoniaConceptos basicos de telefonia
Conceptos basicos de telefonia
jcfarit
 
Manual de usuario Ruani
Manual de usuario RuaniManual de usuario Ruani
Manual de usuario Ruani
jcfarit
 
Unidad 3 gestion de procesos en linux
Unidad 3 gestion de procesos en linuxUnidad 3 gestion de procesos en linux
Unidad 3 gestion de procesos en linux
jcfarit
 
Arquitectura General del Sistema Operativo Linux
Arquitectura General del Sistema Operativo LinuxArquitectura General del Sistema Operativo Linux
Arquitectura General del Sistema Operativo Linux
jcfarit
 
ISO 27001 -6
ISO 27001 -6ISO 27001 -6
ISO 27001 -6
jcfarit
 
ISO 27001 - 5
ISO 27001 - 5ISO 27001 - 5
ISO 27001 - 5
jcfarit
 
ISO 27001 4
ISO 27001 4ISO 27001 4
ISO 27001 4
jcfarit
 
ISO 27001 -3
ISO 27001 -3 ISO 27001 -3
ISO 27001 -3
jcfarit
 
ISO 27001
ISO 27001ISO 27001
ISO 27001
jcfarit
 
ISO 27001
ISO 27001ISO 27001
ISO 27001
jcfarit
 
Curso ubuntuimprimible
Curso ubuntuimprimibleCurso ubuntuimprimible
Curso ubuntuimprimible
jcfarit
 
Curso ubuntu1extraimprimible
Curso ubuntu1extraimprimibleCurso ubuntu1extraimprimible
Curso ubuntu1extraimprimible
jcfarit
 
Autentificación-Firma Digital
Autentificación-Firma DigitalAutentificación-Firma Digital
Autentificación-Firma Digital
jcfarit
 
Auditoría de Routers y Switches
Auditoría de Routers y SwitchesAuditoría de Routers y Switches
Auditoría de Routers y Switches
jcfarit
 
Arquitectura multi agente.doc
Arquitectura multi agente.docArquitectura multi agente.doc
Arquitectura multi agente.doc
jcfarit
 
Aplicaciones Criptográficas en Entornos Económicos
Aplicaciones Criptográficas en Entornos EconómicosAplicaciones Criptográficas en Entornos Económicos
Aplicaciones Criptográficas en Entornos Económicos
jcfarit
 
Análisis de los sistemas de dinero electrónico
Análisis de los sistemas de dinero electrónicoAnálisis de los sistemas de dinero electrónico
Análisis de los sistemas de dinero electrónico
jcfarit
 
Suneval
SunevalSuneval
Suneval
jcfarit
 
Guia plan de_clases
Guia plan de_clasesGuia plan de_clases
Guia plan de_clases
jcfarit
 
Los medios de enseñanza aprendizaje
Los medios de enseñanza aprendizajeLos medios de enseñanza aprendizaje
Los medios de enseñanza aprendizaje
jcfarit
 

Más de jcfarit (20)

Conceptos basicos de telefonia
Conceptos basicos de telefoniaConceptos basicos de telefonia
Conceptos basicos de telefonia
 
Manual de usuario Ruani
Manual de usuario RuaniManual de usuario Ruani
Manual de usuario Ruani
 
Unidad 3 gestion de procesos en linux
Unidad 3 gestion de procesos en linuxUnidad 3 gestion de procesos en linux
Unidad 3 gestion de procesos en linux
 
Arquitectura General del Sistema Operativo Linux
Arquitectura General del Sistema Operativo LinuxArquitectura General del Sistema Operativo Linux
Arquitectura General del Sistema Operativo Linux
 
ISO 27001 -6
ISO 27001 -6ISO 27001 -6
ISO 27001 -6
 
ISO 27001 - 5
ISO 27001 - 5ISO 27001 - 5
ISO 27001 - 5
 
ISO 27001 4
ISO 27001 4ISO 27001 4
ISO 27001 4
 
ISO 27001 -3
ISO 27001 -3 ISO 27001 -3
ISO 27001 -3
 
ISO 27001
ISO 27001ISO 27001
ISO 27001
 
ISO 27001
ISO 27001ISO 27001
ISO 27001
 
Curso ubuntuimprimible
Curso ubuntuimprimibleCurso ubuntuimprimible
Curso ubuntuimprimible
 
Curso ubuntu1extraimprimible
Curso ubuntu1extraimprimibleCurso ubuntu1extraimprimible
Curso ubuntu1extraimprimible
 
Autentificación-Firma Digital
Autentificación-Firma DigitalAutentificación-Firma Digital
Autentificación-Firma Digital
 
Auditoría de Routers y Switches
Auditoría de Routers y SwitchesAuditoría de Routers y Switches
Auditoría de Routers y Switches
 
Arquitectura multi agente.doc
Arquitectura multi agente.docArquitectura multi agente.doc
Arquitectura multi agente.doc
 
Aplicaciones Criptográficas en Entornos Económicos
Aplicaciones Criptográficas en Entornos EconómicosAplicaciones Criptográficas en Entornos Económicos
Aplicaciones Criptográficas en Entornos Económicos
 
Análisis de los sistemas de dinero electrónico
Análisis de los sistemas de dinero electrónicoAnálisis de los sistemas de dinero electrónico
Análisis de los sistemas de dinero electrónico
 
Suneval
SunevalSuneval
Suneval
 
Guia plan de_clases
Guia plan de_clasesGuia plan de_clases
Guia plan de_clases
 
Los medios de enseñanza aprendizaje
Los medios de enseñanza aprendizajeLos medios de enseñanza aprendizaje
Los medios de enseñanza aprendizaje
 

Último

SEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
SEGURIDAD INFORMATICA- Ariana Vicente CruzattSEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
SEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
vicenteariana54
 
Oruam, el pequeño y el gran carismatico mago
Oruam, el pequeño y el gran carismatico magoOruam, el pequeño y el gran carismatico mago
Oruam, el pequeño y el gran carismatico mago
ChichipeSevillaJhost
 
PRESENTACION TEMA COMPUESTO AROMATICOS Y
PRESENTACION TEMA COMPUESTO AROMATICOS YPRESENTACION TEMA COMPUESTO AROMATICOS Y
PRESENTACION TEMA COMPUESTO AROMATICOS Y
WillyBernab
 
Sesión N°10 / Monografía sobre la inteligencia artifical
Sesión N°10 / Monografía sobre la inteligencia artificalSesión N°10 / Monografía sobre la inteligencia artifical
Sesión N°10 / Monografía sobre la inteligencia artifical
Angeles del Rosario Escobar Mendoza
 
Diapositiva Herramientas Web, Tema Web 3.0.pptx
Diapositiva Herramientas Web, Tema Web 3.0.pptxDiapositiva Herramientas Web, Tema Web 3.0.pptx
Diapositiva Herramientas Web, Tema Web 3.0.pptx
erick502105
 
ESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidad
ESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidadESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidad
ESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidad
jorgejhonatanaltamir1
 
FICHA DE EDUCACIÓN RELIGIOSA 17 DE CTUBRE LA oracion.docx
FICHA DE EDUCACIÓN RELIGIOSA  17 DE CTUBRE LA  oracion.docxFICHA DE EDUCACIÓN RELIGIOSA  17 DE CTUBRE LA  oracion.docx
FICHA DE EDUCACIÓN RELIGIOSA 17 DE CTUBRE LA oracion.docx
EmilyEsmeraldaQuispe
 
COMO EVOLUCIONO LAS WEB EN PLENO 2024.docx
COMO EVOLUCIONO LAS WEB EN PLENO 2024.docxCOMO EVOLUCIONO LAS WEB EN PLENO 2024.docx
COMO EVOLUCIONO LAS WEB EN PLENO 2024.docx
Jean Apellidos
 
Oración a Pomba Gira María Padilha .docx
Oración a Pomba Gira María Padilha .docxOración a Pomba Gira María Padilha .docx
Oración a Pomba Gira María Padilha .docx
LuisAlbertoCordovaBa
 
extraccion-de-alcaloides-de-la-planta-de-coca.pdf
extraccion-de-alcaloides-de-la-planta-de-coca.pdfextraccion-de-alcaloides-de-la-planta-de-coca.pdf
extraccion-de-alcaloides-de-la-planta-de-coca.pdf
JENNYMARITZAHUILLCAR
 
SLIDESHARE, qué es, ventajas y desventajas
SLIDESHARE, qué es, ventajas y desventajasSLIDESHARE, qué es, ventajas y desventajas
SLIDESHARE, qué es, ventajas y desventajas
ruthechepurizaca
 
COMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNET
COMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNETCOMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNET
COMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNET
Kevin Aguilar Garcia
 
Análisis de Crowdfunding con el maestro Tapia de Artes
Análisis de Crowdfunding con el maestro Tapia de ArtesAnálisis de Crowdfunding con el maestro Tapia de Artes
Análisis de Crowdfunding con el maestro Tapia de Artes
al050121024
 
La revolución de Netflix redefiniendo las películas, la televisión, el arte y...
La revolución de Netflix redefiniendo las películas, la televisión, el arte y...La revolución de Netflix redefiniendo las películas, la televisión, el arte y...
La revolución de Netflix redefiniendo las películas, la televisión, el arte y...
NoraRoberts5
 
APLICACIONES DE INTERNET-INFORMATICA.pptx
APLICACIONES DE INTERNET-INFORMATICA.pptxAPLICACIONES DE INTERNET-INFORMATICA.pptx
APLICACIONES DE INTERNET-INFORMATICA.pptx
cpadua713
 

Último (15)

SEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
SEGURIDAD INFORMATICA- Ariana Vicente CruzattSEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
SEGURIDAD INFORMATICA- Ariana Vicente Cruzatt
 
Oruam, el pequeño y el gran carismatico mago
Oruam, el pequeño y el gran carismatico magoOruam, el pequeño y el gran carismatico mago
Oruam, el pequeño y el gran carismatico mago
 
PRESENTACION TEMA COMPUESTO AROMATICOS Y
PRESENTACION TEMA COMPUESTO AROMATICOS YPRESENTACION TEMA COMPUESTO AROMATICOS Y
PRESENTACION TEMA COMPUESTO AROMATICOS Y
 
Sesión N°10 / Monografía sobre la inteligencia artifical
Sesión N°10 / Monografía sobre la inteligencia artificalSesión N°10 / Monografía sobre la inteligencia artifical
Sesión N°10 / Monografía sobre la inteligencia artifical
 
Diapositiva Herramientas Web, Tema Web 3.0.pptx
Diapositiva Herramientas Web, Tema Web 3.0.pptxDiapositiva Herramientas Web, Tema Web 3.0.pptx
Diapositiva Herramientas Web, Tema Web 3.0.pptx
 
ESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidad
ESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidadESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidad
ESTUDIANTES BENEFICIARIOS que se suman a los beneficios de la universidad
 
FICHA DE EDUCACIÓN RELIGIOSA 17 DE CTUBRE LA oracion.docx
FICHA DE EDUCACIÓN RELIGIOSA  17 DE CTUBRE LA  oracion.docxFICHA DE EDUCACIÓN RELIGIOSA  17 DE CTUBRE LA  oracion.docx
FICHA DE EDUCACIÓN RELIGIOSA 17 DE CTUBRE LA oracion.docx
 
COMO EVOLUCIONO LAS WEB EN PLENO 2024.docx
COMO EVOLUCIONO LAS WEB EN PLENO 2024.docxCOMO EVOLUCIONO LAS WEB EN PLENO 2024.docx
COMO EVOLUCIONO LAS WEB EN PLENO 2024.docx
 
Oración a Pomba Gira María Padilha .docx
Oración a Pomba Gira María Padilha .docxOración a Pomba Gira María Padilha .docx
Oración a Pomba Gira María Padilha .docx
 
extraccion-de-alcaloides-de-la-planta-de-coca.pdf
extraccion-de-alcaloides-de-la-planta-de-coca.pdfextraccion-de-alcaloides-de-la-planta-de-coca.pdf
extraccion-de-alcaloides-de-la-planta-de-coca.pdf
 
SLIDESHARE, qué es, ventajas y desventajas
SLIDESHARE, qué es, ventajas y desventajasSLIDESHARE, qué es, ventajas y desventajas
SLIDESHARE, qué es, ventajas y desventajas
 
COMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNET
COMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNETCOMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNET
COMUNIDADES DE APRENDIZAJE EN EL CURSO DE APLICACIONES PARA INTERNET
 
Análisis de Crowdfunding con el maestro Tapia de Artes
Análisis de Crowdfunding con el maestro Tapia de ArtesAnálisis de Crowdfunding con el maestro Tapia de Artes
Análisis de Crowdfunding con el maestro Tapia de Artes
 
La revolución de Netflix redefiniendo las películas, la televisión, el arte y...
La revolución de Netflix redefiniendo las películas, la televisión, el arte y...La revolución de Netflix redefiniendo las películas, la televisión, el arte y...
La revolución de Netflix redefiniendo las películas, la televisión, el arte y...
 
APLICACIONES DE INTERNET-INFORMATICA.pptx
APLICACIONES DE INTERNET-INFORMATICA.pptxAPLICACIONES DE INTERNET-INFORMATICA.pptx
APLICACIONES DE INTERNET-INFORMATICA.pptx
 

Linq to sql 6

  • 1. LINQ to SQL (Parte 6 – Obtener datos con procedimientos almacenados) 9 respuestas En las últimas semanas he escrito una serie de post sobre LINQ to SQL. Es un ORM integrado en .NET 3.5, y nos permite modelar bases de datos relacionales con clases de .NET. Podemos usar expresiones LINQ para consultar a la base de datos, actualiazarla, insertar y borrar datos. Aquí tenéis los enlaces a los otros post:  Parte 1: Introducción a LINQ to SQL  Parte 2: Definiendo el modelo de datos.  Parte 3: Consultando la base de datos  Parte 4: Actualizando la base de datos.  Parte 5: Enlazar controles de interfaz de usuario con el ASP:LinqDatSource En estos posts vimos cómo usar expresiones LINQ para obtener programáticamente datos de la base de datos. En el post de hoy veremos cómo podemos usar los procedimientos almacenados (SPROCs) y las funciones definidas por el usuario (UDFs) con nuestro modelo LINQ to SQL. El post de hoy veremos el caso de los SPROCs para consultar y obtener datos de la base de datos. En el siguiente post de esta serie veremos cómo actualizar/insertar/borrar datos con SPROCs. ¿SPROC o no SPROC? Esa es la cuestión La pregunta sobre cuando usar el SQL dinámico generado por un ORM en lugar de procedimientos almacenados creando una capa de datos es causa de debates muy acalorados entre desarrolladores, arquitectos y DBAs. Mucha gente más lista que yo ha escrito sobre esto, así que no me decantaré ni por un lado ni por otro. LINQ to SQL es muy flexible, y puede usare para crear un modelo de datos cuyos objetos sean independientes del esquema de la base de datos, y puede encapsular lógica de negocio y reglas de validación que funcionan tanto si se usa SQL generado dinámicamente o a través de SPROCs. En el tercer post de esta serie, hablamos sobre cómo podemos escribir expresiones LINQ contra el modelo de LINQ to SQL como el siguiente código: Cuando escribimos expresiones LINQ como esta, LINQ to SQL ejecutará el SQL dinámico necesario para obtener los objetos de Product que cumplan las restricciones.
  • 2. Como aprenderemos en este post, también podemos mapear SPROCs en la base de datos con la clase DataContext generada por LINQ to SQL, que nos permitirá obtener los mismo objetos de Product llamando a un procedimiento almacenado: Esta habilidad de poder usar tanto SQL dinámico como SPROCs con una capa de datos limpia es muy útil y nos permite una gran flexibilidad en nuestros proyectos. Pasos para mapear y llamar a SPROC con LINQ to SQL En el segundo post de la serie vimos cómo usar el diseñador LINQ to SQL para crear el siguiente modelo de clases:
  • 3. Fijaos en las dos partes del diseñador. La de la izquierda nos permite definir el modelo de datos que mapeara nuestra base de datos. El de la derecha nos permite mapear SPROCs (y UDFs) en nuestro objeto DataContext, que podemos usar en lugar del SQL dinámico para trabajar con los objetos de nuestro modelo de datos. Cómo mapear un SPROC en un DataContext de LINQ to SQL Para mapear SPROCs en la clase DataContext, vamos primero al explorador de servidores de VS 2008 y miramos a los SPROCs de nuestra base de datos:
  • 4. Haciendo doble clic en cualquier SPROC se abrirá para edición y podremos ver el código. Por ejemplo, aquí tenéis el SPROC "CustOrderHist" de la base de datos Northwind: Para mapearlo en nuestra clase DataContext, lo arrastarmos y soltamos desde el explorador de servidores al diseñador de LINQ to SQL. Automáticamente se creará un nuevo método en la clase DataContext:
  • 5. Por defecto el nombre del nuevo método en la clase DataContext será el mismo que el del SPROC, y el tipo de datos devueltos se creará automáticamente con el siguiente patron: "[NombredelSPROC]Result". Por ejemplo: el SPROC de arriba devolverá una secuencia de objetos del tipo "CustOrderHistResult". Podemos cambiar el nombre del método seleccionándolo en el diseñador y cambiarlo en la ventana de propiedades. Como llamar a un nuevo SPROC mapeado. Una vez que hemos seguido los pasos para mapear el SPROC en la clase DataContext, es muy fácil de usar. Todo lo que tenemos que hacer es llamarlo para obtener los resultados fuertemente tipados: En VB: En C#:
  • 6. Además de poder hacer un bucle sobre los resultados, también podemos enlazar los resultados con cualquier control para mostrarlos. Por ejemplo, el siguiente código enlaza los resultados del SPROC a un control <asp:gridview> Con lo que mostramos la historia de productos de un cliente: Mapeando los tipos resultado de los SPROC del modelo de datos En el SPROC "CustOrderHist" devolvía una secuencia de objetos con dos columnas: el nombre del producto y el numero total de pedidos que el cliente ha hecho de ese producto. El diseñador LINQ to SQL definió la clase "CustOrderHistResult" para representar los resultados. También podemos decidir mapear los resultados del SPROC a una clase de nuestro modelo de datos (por ejemplo: a una entidad Product o Order).
  • 7. Por ejemplo, tenemos el SPROC "GetProductsByCategory" en nuestra base de datos que devuelve la siguiente información: Como ántes podemos crear un método "GetProductsByCategory" en la clase DataContext que llama a este SPROC arrastrándolo al diseñador de LINQ to SQL. Más que simplemente arrastrar el SPROC al diseñador, lo arrastraremos encima de la clase "Product": Con esto, el método "GetProductsByCategory" devolverá una secuencia de objetos "Product":
  • 8. LINQ to SQL seguirá los cambios hechos a los objetos que se devuelvan como si fuesen objetos Products obtenidos a partir de expresiones LINQ. Cuando llamemos al método "SubmitChanges()" todos los cambios hechos a esos objetos se guardarán en la base de datos. Por ejemplo, con el siguiente código obtenemos y cambiamos el precio de todos los productos de una categoría aumentándolo en un 90 %: Para entender cómo funciona el método SubmitChanges() y el seguimiento que se hace de los cambios, y ver cómo podemos añadir lógica de negocio a nuestro modelo de datos leed el cuarto post de esta serie. En el próximo post de esta serie veremos también cómo cambiar el SQL generado cuando insertamos/actualizamos/borramos datos con SPROCs personalizados. Lo bueno de todo esto es que el código anterior no habrá que cambiarlo si hemos configurado la clase DataContext para que use SPROCs para las actualizaciones - Manejando resultados múltiples desde SPROCs Cuando un procedimiento almacenado puede devolver varios tipos de datos, el tipo de resultado del SPROC en la clase DataContext no puede ser fuertemente tipado. Por ejemplo, imaginemos el siguiente SPROC que puede devolver un producto o un pedido dependiendo del parámetro de entrada:
  • 9. LINQ to SQL permite crear métodos auxiliares para devolver Product o Order añadiendo una clase parcial "NorthwindDataContext" al proyecto que defina un método (que en este caso llamaremos "VariablesShapeSample") que invoca al SPROC y devuelve un objeto IMultipleResult: VB: C#:
  • 10. Una vez que añadimos este método al proyecto podemos llamarlo y convetir los resultados tanto a una secuencia de Product como de Order: VB: C#: Soporte de funciones definidas por el usuario (UDFs) Además de SPROCS, LINQ to SQL también soporta tanto funciones de usuario de valores y de tablas de valores (UDFs). Una vez que añadimos un método a la clase DataContext, podemos usar estas funciones en nuestras consultas LINQ. Por ejemplo, veamos la función simple "MyUpperFunction":
  • 11. Podemos arrastrar y soltar desde el explorador de servidores al diseñador de LINQ to SQL para añadirlo como un método a nuestro DataContext: Luego podemos usar esta función UDF en expresiones LINQ cuando escribimos consultas contra nuestro modelo LINQ to SQL: VB: C#: Si usamos el visualizador de debug de LINQ to SQL del que ya hablamos aquí, podemos ver cómo LINQ to SQL transforma la expresión anterior en una SQL que ejecutará el UDF en la base de datos en tiempo de ejecución:
  • 12. Resumen LINQ to SQL soporta poder usar procedimientos almacenados y UDFs contra la base de datos y los integra en nuestro modelo de datos. En este post hemos visto cómo podemos usar SPROCs para obtener datos y pasarlo entre nuestras clases del modelo. En el próximo post veremos cómo podemos usar SPROCS para sobreescribir la lógica de actualización/inserción/borrado cuando llamamos a SubmitChanges() en el DataContext para guardar los cambios.