Está en la página 1de 16

23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .

NET

Usando LINQ to SQL (1 Parte)


En los ltimos meses he escrito una serie de post que cubran algunas de las caracterstcias que van a venir
con Visual Studio y .NET Framework "Orcas". Aqu tenis los enlaces:

Propiedades automticas, inicializadores de objectos e inicializadores de colleciones.


Mtodos de extensin.
Expresiones Lambda.
Sintaxis de consultas.
Tipos Annimos

Las caractersticas anteriores hacen que la consulta de datos sea un concepto de primera clase. Conocemos
a este modelode programacin como "LINQ" - que viene de .NET Language Integrated Query.

Los desarrolladores pueden usar LINQcon cualquier fuente de datos. Pueden expresar consultas
e cientemente enloslenguajes de programacin que eligan,opcionalmentetransformar/incrustar los
resultados de las consultas enel formato que quieran, y entonces manipular fcilmente los resultados. Los
lenguajeshabilitados para LINQ pueden aportar seguridad de tipos y chequeo en tiempo de compilacin el
las expresiones de consulta, y desarrollarherramientas que aporten intelisense, debugging, y un gran
soporte pararefactoring cuando escriban cdigo de LINQ.

LINQ soporta un modelo de extensibilidad muy ricoque facilita lacreacinde operadores e cientes para
fuentes de datos. La versin "Orcas" del .NET Framework viene con libreras que habilitan LINQ
sobreobjetos, XML y bases de datos.

Qu es LINQ to SQL?

LINQ to SQL es una implementacin de O/RM(object relational mapping, mapeador de objetos


relacionales) que viene con la versin "Orcas" del .NET Framework, y nos permite modelar bases de datos
relacionales con clases de .NET. Podemos consultar bases de datos con LINQ, as como
actualizar/aadir/borrar datos de ellas.

Modelando bases de datos con LINQ to SQL:

Visual Studio "Orcas" viene con un diseador de LINQ to SQL que nos aporta una forma fcil de modelar y
visualizar una base de datos como un modelo de objeto de LINQ to SQL. El prximo post cubrir en ms
profundidad cmo usar este diseador (podis ver este video que hice en Enero para verme construir un
modelo LINQ to SQL).

Usando ese diseador LINQ to SQL puedo crear fcilmente una representacin de la base de datos
"Northwind":

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 1/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

El diseo de arriba de ne cuatro clases: Product, Category, Order y OrderDetail. Las propiedades de cada
clase mapean las columnas de cada table en la base de datos. Cada instancia de esa clase representa una
la en las tablas.

Las echas entre las cuatro clases de arriba representan las asociaciones/relaciones entre las diferentes
entidades. Son tpicamente modeladas como relaciones primary-key/foreign-key en la base de datos. La
direccin de las echas en el diseador indican si la relacin es uno-a-uno o uno-a-varios. Se aadiran
propiedades fuertemente tipadas a las entidades basndose en esto. Por ejemplo, la clase Category de
arriba tiene una relacin de uno-a-varios con la clase Product. Esto implica que tendr una propiedad
"Categories" que es una coleccin de objetos Product con esa categora. La clase Product entonces tiene
una propiedad "Category" que apunta a una instancia de la clase Category representando la categora a la
que pertenece el producto.

El panel de la derecha del diseador LINQ to SQL contiene una lista de procedimientos almacenados que
interactan con nuestro modelo de base de datos. En el ejemplo de arriba hemos aadido un SPROC
(Procedimiento almacenado) "GetProductsByCategory". Como entrada recibe un categoryID, y devuelve una
secuencia de Product como resultado. Veremos cmo llamar a este procedimiento almacenado en un
ejemplo.

Entendiendo la clase DataContext

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 2/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

Cuando pulsis el boton "save" del diseador de LINQ to SQL, Visual Studio generar clases .NET para
representar las entidades y las relaciones de la base de datos que hemos modelado. Por cada archivo
aadido a nuestra solucin por el diseadorLINQ to SQL tambin se generar una clase DataContext. Esta
clase es a traves de la cual realizaremos las consultas a las entidades de nuestra base de datos. Esta clase
tendr propiedades que representarn a cada tabla que hemos modelado, as como mtodos para cada
procedimiento almacenado que aadamos.

Por ejemplo, aqu tenis la clase NorthwindDataContext:

Ejemplos de LINQ to SQL

Una vez que hemos modelado nuestra base de datos con el diseador de LINQ to SQL, podemos escribir
cdigo fcilmente para trabajar con l. Aqu tenis unos cuantos ejemplos que muestran tareas comunes
con datos:

1) Consultando Products de la base de datos

El siguiente cdigo usa una consulta LINQ para obtener una secuencia IEnumerable de objetos Product.
Fijos que este cdigo est consultando a traves de la relacin Product/Category para obtener aquellos
productos de la categora "Beverages".

C#:

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 3/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

VB:

2) Actualizando un producto en la base de datos.

El cdigo siguiente muestra cmo obtener un producto de la base de datos, actualizar su precio, y guardar
los cambios en la base de datos:

C#:

VB:

Nota: VB en "Orcas" Beta1 no soporta Lambdas an. Pero en la Beta2 s -de forma que el cdigo anterior se
podr escribir de una forma ms concisa.

3) Aadir una nueva categora y dos nuevos productos en la base de datos.

El siguiente cdigo muestra cmo crear una nueva categora, y entonces crear dos nuevos productos y
asociarlos a la nueva categora. Los tres son despus guardados en la base de datos.

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 4/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

Fijaos como no necesitamos administrar manualmente las relaciones primarykey/foreignkey. Slo tenemos
que aadir los objetos Product en la coleccin "Products" de la categora, y luego aadir el nuevo objeto
Category en la coleccin de "Categories" del DataContext, LINQ to SQL sabr automticamente crear las
PF/FK necesarias:

C#:

4)Borar productos de la base de datos.

El cdigo siguiente muestra cmo borrar todos los productos Toy de la base de datos:

C#:

VB:

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 5/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

5) Llamar a un procedimiento almacenado.

El cdigo siguiente muestra cmo obtener entidades de la tabla Product sin usar una consulta LINQ, sino
llamando al procedimiento almacenado "GetProductsByCategory" que aadimos a nuestro modelo de
datos. Fijos que cuando obtenemos los resultados de la tabla Product, podemos actualizar/borrarlos y
llamar a db.SubmitChanges() para hacer las modi caciones en la base de datos.

C#:

VB:

6) Obtener productos con paginado del lado del servidor

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 6/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

El cdigo siguiente muestra cmo implementar un paginado e ciente en el lado servidor como parte de
una consulta LINQ. Usando los operadores Skip() y Take(), slo devoleremos 10 las de la base de datos - a
partir de la la 200.

C#:

VB:

Resumen:

LINQ to SQL nos permite modelar la capa de datos de nuestras aplicaciones de una forma simple y limpia.
Una vez que hayamos de nido nuestro modelo de datos, podemos realizar consultas, inserciones,
actualizaciones y borrados sobre ella de forma fcil y e ciente.

Espero que esta introduccin os haya abierto el apetito de aprender ms. En las prximas semanas
continuar esta serie de post explorando el LINQ to SQL en ms detalle.

Espero que sirva.

Scott.

Traducido por: Juan Mara La Ramos. Microsoft Student Partner

Comparte esto:

Facebook 31 Twitter LinkedIn Ms

Esta entrada fue publicada en LINQ, LINQ to SQL, Scott Guthri el 20 Mayo, 2007
[http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/] .

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 7/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

44 pensamientos en Usando LINQ to SQL (1 Parte)

Pingback: LINQ to SQL (2 Parte - De niendo nuestras clases del modelo de datos) Thinking in .NET

Pingback: LINQ to SQL (3 Parte - Consultando la base de datos) Thinking in .NET

Pingback: LINQ to SQL (5 Parte - Enlazar controles de interfaz de usuario con el ASP:LinqDatSource
Thinking in .NET

Pingback: LINQ to SQL Un dia duro

Pingback: Serie de Post sobre LINQ to SQL Server Alexander Jimnez

Pingback: Visor de Debugging de LINQ to SQL Thinking in .NET

Pingback: LINQ to SQL (Parte 6 - Obtener datos con procedimientos almacenados) Thinking in .NET

Pingback: LINQ to SLQ (Parte 7 - Actualizando la base de datos con procedimientos almacenados) Thinking
in .NET

Pingback: LINQ to SQL (Parte 8 - Ejecutar consultas SQL personalizadas) Thinking in .NET

Pingback: LINQ to SQL (Parte 9 - Uso de expresiones LINQ personalizadas con el control ) Thinking in .NET

Pingback: LINQ. que es y como usuarlo. Alexander Jimnez

Pingback: Nuevo soporte para datos dinmicos en ASP.NET Thinking in .NET

Fran Diaz
23 Abril, 2008 en 7:10

Jos Maria, gracias por la traduccin!!!!

Pedazo de tutorial!!!

Saludos!!

Vio
23 Abril, 2008 en 7:26

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 8/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

Gracias a ti Fran por colaborar tanto en los foros de MSDN.

Jos Cardaropoli
24 Junio, 2008 en 12:21

Hola !!

Doy mis primeros pasos en .Net programando windows forms con C#, he notado que Linq es una poderosa
herramineta que tiene algunos detalles sin resolver, en un principio lo adjudique a mi falta de
conocimiento, pero luego de leer algunos articulos en la red, veo esta cosas que siento como debilidades.
1. No poder abrir ms de un datacontext, no poder desattachar (estoy usando VS2008) y tener que utilizar
una instancia pblica.

2. Problema con el refresco en los binding de datos en controles.

Igualmente veo en Linq to Sql (aunque he leido que MS no lo recominenda por el momento para
aplicaciones de produccin) como la herramienta ideal.

Me gustara conocer vuestra opinin al respecto

Muchas gracias

Vio
24 Junio, 2008 en 18:27

Hola Jose:

Te comento entre lneas:

1. No poder abrir ms de un datacontext, no poder desattachar (estoy usando VS200 y tener que utilizar
una instancia pblica.

Las clases datacontext tienen cuatro constructores, uno de ellos tiene un parmetro del tipo string. En ese
string le puedes pasar la cadena de conexion que quieras e instanciarte dos contextos diferentes, uno en la
base de datos A y el otro en B, y tienes dos contextos diferentes de bases de datos diferentes. Con respecto
a lo de desattachar, LINQ to SQL se basa en el modelo desconectado, por lo que todos sus elementos
estn desattachados, adems del concepto de carga retrasada. Lo que hace LINQ to SQL es hacer un
seguimiento de los cambios que se van realizando a los objetos, y cuando se llama a submitchanges realiza

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 9/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

todas las modi caciones en una transaccin, es decir, si alguna operacin falla, la base de datos se queda
como est.

2. Problema con el refresco en los binding de datos en controles.

Es la primera noticia que tengo, pero viendo el punto 1, creo que lo que te ocurre es que refrescas el
binding ntes de hacer un submitchanges.

Espero que te sirva.

Un saludo.

dalia
24 Agosto, 2008 en 22:12

hola ojala q me ayuden con esta conexion yo estoy usando WPF y estoy tratando hacer linq to sql pero no
me reconoce.
Dim guardar As New Guardar_ContactosDataContext
a la variable guardar me sale el error :

error de resolucion de sobrecarga porque ninguna de las funciones New a las que se tiene acceso acepta
este numero de argumentos.

???
gracias

matias
24 Octubre, 2008 en 18:29

hola,muy bueno tu foro, me esta sirviendo mucho para todo lo relacionado a .net, solo tengo un problema,:
instale visual web developer express 2008 con sp1 y en la instalacion tambien em instalo sql server 2008
express, la cosa es q cuando quiero agregar una base de datos en un proyecto web en asp.net me sale el
siguiente error:

No se pudo generar una instancia de usuariode SQL Server debido a un error al iniciar el proceso para la
instancia de usuario. se cerrara la conexion.

la verdad es q por mas q pregunte en foros nadie me responde a esta pregunta y decidi recurrir a este
medio, q por lo q veo estas bien metido en el tema, gracias.

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 10/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

como otra dato en el SQl Server con guration manager hay 3 servicios
SQL server browser, SQL server (express) y Agente SQl server.
de estos 3 solo em dejar en ejecucion al sql server espress, lso demas ni em deja activarlos o darle al play.

me parece raro ya q en la instalacion q se llevo a cabo junto con la de visual web developer 2008 no salto
ningun error, bue de antemano gracias por tu ayuda.

colorbaby
23 Noviembre, 2009 en 16:37

Conseguiste solucionar el problema?? por favor contestame! gracias

ayudante
22 Febrero, 2010 en 10:03

http://social.msdn.microsoft.com/Forums/es-ES/netfxwebes/thread/1d147b32-8ec2-4404-85eb-
4f073fd39bc4

Strun
26 Octubre, 2008 en 19:58

Tengo el mismo problema que Matas.

He probado a reinstalar, instalar SQL Server 2005, pero me sigue saliendo el mismo error con el Visual
Studio 2008. Llevo mucho tiempo perdido con esto y seguro que es alguna tontera.

Si alguien sabe algo me salva el culo.

Muchas gracias.

Israel
31 Enero, 2009 en 16:20

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 11/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

Hola muchas gracias por el tutorial apenas estoy por aprender algo de LINQ ya tengo algo de rato con
versiones anteriores, gracias por tomarte el tiempo de compartir esto!!

Fran
21 Mayo, 2009 en 14:07

El motor de base de datos esta envevido en en linq, tiene su propio motor?

Omar
11 Junio, 2009 en 20:59

Pregunta para VIO:


LINQ to SQL funciona tambin para MySql Server solo para MS Sql Server?, es que intent y por ms que
quise no funcion (Con MySql).

Lo que me parece genial es la integracin de consultas al lenguaje de programacin, buen aporte, espero tu
respuesta =)

Vio
13 Junio, 2009 en 8:10

Hola Omar:

Te estas re riendo a LINQ to MySql. Debes instalarte el data provider para MYSql. una simple bsqueda en
Google te dar la respuesta: el proyecto Open Source DbLinq.
http://code2code.net/DB_Linq/
Espero que sirva

monica
21 Julio, 2009 en 13:53

gracias muy bueno tu foro me ayudo bastante

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 12/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

Pingback: LINQ | Un Mundo Interesante ....

zelski
5 Octubre, 2009 en 19:03

Tengo una duda enorme, cuando abres o instancias el datacontext se abre la conexion a la base de datos,
se hacen las operaciones necesarias, pero, he aqui mi duda, como se que la conexion se ha cerrado, o en su
caso como debo cerrarla?, con connection.Close() ???, por que apenas me ha salido un error de pool
connection, en donde al parecer habia demasiadas conexiones abiertas.

Gracias de antemano.

Pingback: ASP.NET MVC Framework (Primera parte) Thinking in .NET

Leonardo Novoa
7 Octubre, 2010 en 13:11

Hola, tengo un gran problema o pues para m lo es. Llevo dias quemandome las pestaas frente al pc y no
he podido arreglar un inconveniente, claro como siempre cualquier cosa es fcil para aquel que domina el
tema. Les solicito porfavor, alguien me puede colaborar con este inconveniente. Estoy trabajando con linq,
tenia dos procesos, y funcionaban correctamente, en una aplicacin windows forms, nalmente me
solicitaron que colocara los dos procesos en hilos independientes lo realice, pero obtuve problemas de
concurrencia, ya que usaba el mismo datacontext y los procesos usaban esta conexin, por tanto cree un
nuevo datacontext cada vez que necesitaba hacer alguna accin en la base de datos con el segundo, pero
me arroja un error que dice que no se puede adjuntar una entidad que ha sido creada con otro
datacontext, no se entonces que pueda hacer. Les sera muy agradecido si me colaboraran con esto. Mil
gracias. Hasta luego.

msegovia
12 Octubre, 2010 en 11:56

Hola quisiera pedir que ayude diferencia con LINQ to ENTITIES y LINQ to SQL

SE LO VOY AGRADECER MUCHISIMOS

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 13/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

yo
2 Noviembre, 2010 en 10:56

hola quisiera hacer con LINQ un giro de una tabla, es decir, la funcin PIVOT de SQL pero para LINQ. Las
columnas que querra pasar a las son dinmicas por lo que no me sirve nada en lo que hay que poner
columnas por defecto.

Gracias!

noe
29 Noviembre, 2010 en 3:02

parece una copia de visualfox

Alex
26 Marzo, 2011 en 16:22

Visual foxpro ya tenia muchas de las cosas que recien estan inventando para .NET y para JAVA solo que no
corria para la Web

muy bonito LINQ pero pre ero trabajar todo a mano para aplicaciones de alto rendimiento, pero si voy
hacer un misio CRUD pues mejor usar LINQ

berthely
3 Abril, 2011 en 20:15

Pues el video que apareci en el Link esta exelente, explica un ejemplo completo de como usar LINQ (est
en ingls)

martin
3 Octubre, 2011 en 7:19

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 14/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

Error: when say: La versin Orcas del .NET Framework biene con libreras que habilitan LINQ sobre
objetos, XML y bases de datos.

The word biene be write with v

thanks

Juanma Autor

3 Octubre, 2011 en 8:20

Gracias Martn. Ya est corregido.

Miguel
26 Febrero, 2012 en 6:17

Hola!!
estuve probando el cdigo planteado en tus ejemplos, pero cuando intete eliminar un registro de la Base
de datos, busque el mtodo el removeAll y no lo encontr, osea no aparece en el Intellicense y me sale un
error alli.

Es en esta parte: db.


Products.RemoveAll(product);
porfavor me puedes ayudar
muchas gracias

Juanma Autor

5 Marzo, 2012 en 22:53

Hola Miguel
has probado con DeleteObject y DeleteAllOnSubmit()?
Espero que sirva.

Alex
14 Mayo, 2012 en 22:12

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 15/16
23/8/2017 Usando LINQ to SQL (1 Parte) | Speaking in .NET

Saludos, excelente tutorial, desarrollo en ASP.NET tradicional pero me quiero actualizar. Estaba siguiendo
tu tutorial pero el PDF se corta en algunas secciones claves. Podras enviarme los fuentes por favor?, te
estara muy agradecido, mi correo es: deviloper87@gmail.com

Gracias de antemano.

Juanma Autor

16 Mayo, 2012 en 20:46

Hola Alex:
Podras indicar en qu partes se corta para poder corregirlas en el post?
Gracias

Luis
16 Mayo, 2012 en 17:07

mis hermanos, estn llenos de sabidura. Voy a seguir su tutorial paso a paso, es raro encontrar tutoriales
tan bien explicados, ahorita estoy en el proceso de aprender .NET usando entidades, linq y toda esta nueva
tecnologa, espero nos podamos apoyar mutuamente, un abrazo desde Mxico!!

Pingback: links de programacion con c# y linq | Academia Bhargo

Jose
2 Mayo, 2014 en 16:28

Talvez estas trabajando con varios proyectos en tu solucion, lo que tendrias que hacer es copiar tu cadena
de conexion de tu BD a tu app de tu formulario.

Los comentarios estn cerrados.

http://speakingin.net/2007/05/20/usando-linq-to-sql-1%c2%aa-parte/ 16/16