Académique Documents
Professionnel Documents
Culture Documents
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 modelo de programacin
como "LINQ" - que viene de .NET Language Integrated Query.
Los desarrolladores pueden usar LINQ con cualquier fuente de datos.
Pueden expresar consultas eficientemente en los lenguajes de
programacin que eligan, opcionalmente transformar/incrustar los resultados
de las consultas en el formato que quieran, y entonces manipular fcilmente
los resultados. Los lenguajes habilitados para LINQ pueden aportar
seguridad de tipos y chequeo en tiempo de compilacin el las expresiones
de consulta, y desarrollar herramientas que aporten intelisense, debugging,
y un gran soporte para refactoring cuando escriban cdigo de LINQ.
LINQ soporta un modelo de extensibilidad muy rico que facilita
la creacin de operadores eficientes para fuentes de datos. La versin
"Orcas" del .NET Framework viene con libreras que habilitan LINQ
sobre objetos, 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 videoque 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":
VB:
VB:
VB:
VB:
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 definido nuestro
modelo de datos, podemos realizar consultas, inserciones, actualizaciones y
borrados sobre ella de forma fcil y eficiente.
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
Esta relacin har que la clase entidad Product tenga una propiedad
llamada "Category" que los desarrolladores usarn para acceder a la
entidad Category para un Product dado. Tambin har que la clase
Category tenga una coleccin de "Products" que permitir a los
desarrolladores obtener todos los productos de una Category.
Podemos usar tanto una consulta SQL (que generar una consulta SQL
adhoc) o invocar el procedimiento almacenado aadido para obtener las
entidades product de la base de datos:
LINQ to SQL provee una forma limpia de modelar las capas de datos de
nuestras aplicaciones. Una vez que tengamos nuestro modelado de datos,
podemos realizar de forma eficiente consultas, inserciones, actualizaciones,
y borrados sobre l.
Con el diseador de LINQ to SQL que viene en Visual Studio y en Visual
Web Developer Express podemos crear y administrar nuestros modelso de
datos para LINQ to SQL extremadamente rpido. El diseador LINQ to SQL
tambin permite una gran flexibilidad que nos permite personalizar el
comportamiento por defecto y sobreescribir/extender el sistema para que se
adapte a nuestras necesidades.
En prximos post usaremos este modelo que hemos creado para ver en
ms detalle los procesos de consulta, inserciones, actualizaciones y
borrados. En estos post tambin veremos cmo aadir validaciones
negocio/datos personalizadas a las entidades que hemos diseado.
Mike Taulty tiene una gran cantidad de videos sobre LINQ to SQL aqu, os
recomiendo que los veis. As tenis una forma de aprender viendo cmo se
usa LINQ to SQL.
Espero que sirva.
Scott.
Traducido por: Juan Mara La Ramos. Microsoft Student Partner
El mes pasado empez una serie de post sobre LINQ to SQL. LINQ to
SQL es un framework O/RM (Object relational mapping) que viene como
parte del .NET Framework 3.5, que nos permite modelar de forma sencilla
bases de datos relacionales con clases de .NET. Podemos usar, por tanto,
expresiones LINQ tanto para consultar a la base de datos como para
actualizar/inertar/borrar datos.
Aqu tenis los enlaces a los primero dos post de esta serie:
Usando LINQ to SQL (1 Parte)
LINQ to SQL (2 Parte - Definiendo nuestras clases del modelo
de datos)
En el post de hoy vamos a ver en ms detalle cmo usar el modelo de
datos que creamos en la segunda parte, y veremos cmo usarlo para
consultar datos en un proyecto ASP.NET.
Modelo de la base de datos Northwind con LINQ to SQL
En el segundo post de la serie vimos cmo crear un modelo de clases
LINQ to SQL usando el diseador de LINQ to SQL que viene con VS 2008.
Aqu tenis el modelo que creamos a partir de la base de datos de
ejemplo Northwind:
Obteniendo productos.
Una vez que tenemos definido nuestras clases del modelo de datos,
podemos consultar y obtener fcilmente datos de nuestra base de datos.
LINQ to SQL nos permite esto usando la sintxis de consultas de LINQ
sobre la clase NorthwindDataContext que creamos con el diseador LINQ
to SQL.
Por ejemplo, para obtener e iterar sobre una secuencia de objetos Product
podemos escribir el siguiente cdigo:
Por poner otro ejemplo del uso de las relaciones de nuestro modelo, podramos escribir la siguiente consulta LINQ para obtener aquellos productos
que tengan ms de cinco rdenes para ellos:
Esto nos dar una pgina de productos, filtrada para mostrar aquellos
productos que tengan ms de cinco pedidos, mostrando datos calculados
dinmicamente, y que son paginables a partir de una cadena de consulta:
Nota: Cuando trabajamos contra SQL 2005, LINQ to SQL usar la funcin
SQL ROW_NUMBER() para crear toda la lgica de paginacin en la base
de datos. Esto nos asegura que slo devolver las 10 filas de datos que
queremos mostrar en la pgina:
n las ltimas semanas he escrito una serie de post sobre LINQ to SQL.
LINQ to SQL es un O/RM(object relational mapper) integrado en la versin
3.5 del framework de .NET, y nos permite modelar fcilmente bases de
datos relacionales en clases de .NET. Podemos usar expresiones LINQ
tanto para consultar la base de datos como para actualizar, insertar y borrar
datos.
Aqu tenis los links a los tres primeros post:
Parte 1: Introduccin a LINQ to SQL
Parte 2: Definiendo el modelo de datos.
Parte 3: Consultando la base de datos
En el post de hoy veremos cmo usar el modelo de datos que hemos
creado, y usarlo para actualizar, insertar y borrar datos. Tambin veremos
cmo integrar reglas de negocio y crear lgica de validacin personalizada
con nuetro modelo de datos.
Modelado de la base de datos NorthWind con LINQ to SQL
En la segundo post de esta serie, vimos cmo crear el modelo de clases con
el diseador de LINQ to SQL que trae VS 2008. Aqu tenis el modelo que
creamos a partir de la base de datos de ejemplo Northwind que usaremos
en este post:
podemos modelar que cada producto tenga una categora, que cada pedido
tenga un detalle de pedido, asociar cada detalle de pedido con un producto,
y tener un conjunto de pedidos en cada cliente. Ya vimos cmo modelar las
relaciones en la segunda parte de esta serie de post.
LINQ to SQL nos permite aprovechar estas relaciones tanto para consultar
como para actualizar nuestros datos. Por ejemplo, con el siguiente cdigo
creamos un nuevo producto y lo asociamos con la categora "Beverages":
guarden los nuevos datos. LINQ to SQL nos da una lista de conflictos de
valores cambiados al desarrollador y nos permite tanto hacer lo que
queramos como avisar al usuario de la aplicacin para que nos indique el
propio usuario lo que quiere hacer.
Ya veremos en ms detalle este tema en un prximo post.
Uso de procedimientos almacenados o lgica SQL personalizada para
insertar, actualizar y borrar.
Una de las preguntas que tienen los desarrolladores (en especial los DBAs),
que suelen escribir procedimientos almacenados con SQL personalizadas,
cuando ven LINQ to SQL por primeravez es: "pero cmo podemos tener
control absoluto del SQL que se est ejecutando?".
Las buenas noticias son que LINQ to SQL tiene un modelo muy flexible que
nos permite sobreescribir el SQL que se est ejecutando, y llamar a los
procedimientos almacenados que desarrollemos para aadir, actualizar o
borrar datos.
Lo realmente increible es que podemos empezar definiendo nuestro modelo
de datos y dejar que LINQ to SQL administre las inserciones,
actualizaciones y borrados. Una vez hecho esto, podemos personalizar el
modelo de datos para que use nuestros propios procedimientos
almacenados o nuestras sentencias SQL - sin tener que cambiar nada de la
lgica de aplicacin que estamos usando para nuestro modelo de datos, ni
cambiar nada de las validaciones ni de la lgica de negocio. Esto nos da
una gran flexibilidad a la hora de construir nuestra aplicacin.
Dejaremos para otro post cmo personalizar los modelos de datos con
procedimientos almacenados o sentencias SQL.
Resumen.
Este post presenta un buen resumen sobre cmo podemos usar LINQ to
SQL para actualizar nuestra base de datos e integrar de una forma clara
validacin de datos y lgica de negocio. Creo que encontraris que LINQ to
SQL incrementa mucho la prouctividad a la hora de trabajar con datos, y nos
permite escribir cdigo orientado a objeto claro en el acceso a datos.
En prximos post veremos el nuevo control <asp:linqdatasource> de la
versin 3.5 de .NET, y hablaremos sobre lo fcil que es crear interfaces de
usuario en ASP.NET que se aprovechen de los modelos de datos de LINQ
to SQL. Tambin veremos algunos conceptos de programacin ms
especificos de LINQ to SQL sobre concurrencia optimista, carga perezosa,
herencia de mapeado de tablas, uso de procedimientos almacenados y
sentencias SQL personalizadas, y mucho ms.
Espero que sirva.
Scott.
Traducido por: Juan Mara La Ramos. Microsoft Student Partner.
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 tenis los enlaces a los otros post:
Parte 1: Introduccin 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 cmo usar expresiones LINQ para obtener
programticamente datos de la base de datos.
En el post de hoy veremos cmo 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 cmo actualizar/insertar/borrar datos con
SPROCs.
SPROC o no SPROC? Esa es la cuestin
La pregunta sobre cuando usar el SQL dinmico 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.
Esta habilidad de poder usar tanto SQL dinmico 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 cmo usar el diseador LINQ to SQL
para crear el siguiente modelo de clases:
Fijaos en las dos partes del diseador. 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 dinmico para trabajar con los objetos de
nuestro modelo de datos.
Cmo mapear un SPROC en un DataContext de LINQ to SQL
En C#:
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 mtodo "SubmitChanges()" todos los cambios hechos
a esos objetos se guardarn en la base de datos.
Por ejemplo, con el siguiente cdigo obtenemos y cambiamos el precio de
todos los productos de una categora aumentndolo en un 90 %:
C#:
Una vez que aadimos este mtodo al proyecto podemos llamarlo y convetir
los resultados tanto a una secuencia de Product como de Order:
VB:
C#:
C#:
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 cmo podemos usar SPROCs para obtener datos y
pasarlo entre nuestras clases del modelo. En el prximo post veremos cmo
podemos usar SPROCS para sobreescribir la lgica de
actualizacin/insercin/borrado cuando llamamos a SubmitChanges() en el
DataContext para guardar los cambios.
Espero que sirva.
Scott.
Traducido por: Juan Mara La Ramos. Microsoft Student Partner.
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 tenis los enlaces a los otros post:
Parte 1: Introduccin 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
Parte 6: Obtener datos con procedimientos almacenados.
En la sexta parte vimos cmo podemos usar procedimientos almacenados
(SPROCs) y funciones definidas por el usuario (UDFs) para consultar la
base de datos con el modelo de datos de LINQ to SQL. En el post de hoy
veremos cmo podemos usar los SPROCs para actualizar/insertar/borrar
datos de nuestra base de datos.
Para ayudar a entender esto empezaremos costruyendo una capa de datos
para la base de datos de ejemplo Northwind:
Paso 1: Crear nuestra capa de acceso a datos (sin SPROCs)
En la segunda parte de esta serie vimos cmo usar el diseador de LINQ to
SQL de VS 2008 para crear el siguiente modelo de clases:
C#:
C#:
C#:
LINQ to SQL monitoriza todas las modificaciones de los objetos que hemos
obtenido de la base de datos, y guarda los objetos que aadimos. Cuando
llamamos al mtodo DataContext.SubmitChanges(), LINQ to SQL
comprueba las reglas que hemos establecido, y genera automticamente la
SQL que actualizar el registro de Customer e insertar un nuevo registro
en la tabla Orders
Un momento - Pensaba que este post iba sobre SPROCs
Si an estais leyendo, os preguntaris dnde estn los SPROCs en este
post. Porque os estoy mostrando el cdigo de arriba que hace que se
genere una SQL dinmica? Por qu no os he enseado cmo llamar a un
SPROC para hacer las inserciones/actualizaciones/borrados todava?
La razn es que el modelo de programacin de LINQ to SQL tanto para
trabajar con objetos modelados mediante SPROC es exactamente el mismo
que con SQL dinmico. La manera en que aadimos validacin lgica es
exactamente igual (as que todas las reglas que hemos aadido a nuestro
modelo de datos se aplicarn tambin si usamos SPROCs). El cdigo
El ltimo paso ser decirle a nuestra capa de datos que use el SPROC
InsertOrder cuano inserter un nuevo objeto Order en la base de datos. Esto
lo hacemos seleccionando la clase "Order" del diseador LINQ to SQL, y en
las propiedades clicamos el botn "..." del mtodo Insert:
Hacemos clic en el botn "..." y aparecer una ventana que nos permite
personalizar las operaciones de insercin:
Fijaos cmo el modo po defecto ("Use Runtime") est configurado para usar
LINQ to SQL como generador dinmico de las SQL. Para cambiarlo
seleccionamos el radio buton "Customize" y seleccionamos el SPROC
InsertOrder de la lista de SPROCS disponibles:
Ahora las actualizacion del objeto Customer, y la insercin del objeto ORder,
se estn ejecutando a travs de SPROCs en lugar de SQL dinmico. La
lgica de validacin que definimos se siguen ejecutando como antes, y el
cdigo sigue siendo exactamente el mismo.
Apuntes avanzados cuando usamos SPROCs
Veamos unas cuantas recomendaciones tiles para escenarios con SPROC
ms avanzados con LINQ to SQL
Uso de parmetros de salida
En casos de insercin (Paso 3) hemos visto cmo podemos devolver el
nuevo valor OrderID (que es un valor identidad y autoincremental de la tabla
Orders) usando un parmetro de salida en el SPROC. No estamos limitados
a devolver slo valores de columnas identidad con SPROCs y LINQ to SQL
- en realidad podemos actualizar y devolver cualquier parmetro. Podemos
usarlo tanto para insetar como para actualizar. LINQ to SQL tomar el valor
resultado y actualizar la propiedad asociada en el modelo de dato sin que
tengamos que hacer ninguna consulta extra para refrescarlo o calcularlo de
nuevo.
Que pasa si el SPROC da un error?
Si el SPROC da un error mientras inserta, actualiza o borra un dato, LINQ to
SQL cancelar y deshar la transaccin de todos los cambios asociados a
la llamada SubmitChanges(). De manera que nos aseguramos la
consistencia de los datos.
Podemos escribir cdigo en lugar de usar el diseador para llamar a un
SPROC?
Como ya coment al principio, podemos usar tanto el diseador de LINQ to
SQL para mapear las operaciones con SPROC o podemos aadir mtodos
parciales a la clase DataContext programticamente e invocarlos nosotros
mismo. Aqu tenis un ejemplo del cdigo que deberamos escribir para
sobreescribir el mtodo UpdateCustomer de la clase NorthwindDataContext:
En las ltimas semanas he escrito una serie de post sobre LINQ to SQL.
LINQ to SQL es un ORM que viene con .NET 3.5, y nos permite modelar
bases de datos relacionales en clases. Podemos usar expresiones LINQ
para consultar la base de datos y tambin para actualizar, insertar y borrar
datos.
Aqu teneis los enlaces a los diferentes post de la serie:
Parte 1: Introduccin 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
Parte 6: Obtener datos con procedimientos almacenados.
Parte 7: Actualizando la base de datos con procedimientos
almacenados.
En los dos ltimos post vismo cmo podemos usar los procedimientos
almacenados de nuestra base de datos para consultar, insertar, actualizar y
borrar datos con el modelo de LINQ to SQL.
Una pregunta que me han hecho mucho desde que he escrito estos post es:
que pasa si quiero control total sobre las consultas SQL que usa LINQ to
SQL - pero no quiero usar SPROCs para hacerlo? En el post de hoy
veremos eso - y veremos cmo podemos usar expresiones SQL
personalizadas para que LINQ to SQL las use en lugar de las que generara
l.
Uso de expresiones LINQ con LINQ to SQL.
Supongamos que hemos usado el diseador de LINQ to SQL de VS 2008
para modelar un conjunto de clases a partir de la base de datos Northwind
(esto lo vimos en el segundo post de la serie):
En el tercer post vimos cmo podemos usar LINQ con las nuevas
caractersticas de VB y C# para consultar el modelo de clases y devolver un
conjunto de objetos que representan las filas y columnas de la base de
datos.
Por ejemplo, podemos aadir un mtodo a la clase DataContext
"GetProductsByCategory" que usa una consulta LINQ para devolver objetos
de Products de la base de datos:
VB:
c#:
C#:
Ahora podemos invocar a este mtodo e iterar sobre los resultados con el
siguiente codigo:
Resumen
El ORM LINQ to SQL genera y ejectua un SQL dinmico para las consultas,
actualizaciones, inserciones y borrados contra la base de datos.
Para escenarios ms avanzados, o en caso donde queramos un control total
sobre el SQL que se ejecuta, tambin podemos personalizar el ORM para
que ejecute SPROCs, o nuestras consultas SQL personalizadas. Esto nos
da una gran flexibilidad a la hora de construir y extender nuestra capa de
datos.
En prximos post veremos algunos conceptos de LINQ to SQL como:
Herenacia simple de talbas, carga a peticin, concurrencia optimista, y
escenarios de N-capas.
Espero que sirva
Scott
Traducido por: Juan Mara La Ramos. Microsoft Student Partner.
}
}Daros cuenta de que no estamos aadiendo ninguna lgica en
las propiedades Get/Set, todo lo contrario, lo que estamos haciendo
es asignar los valores a una variable. La cuestin es entonces porqu
no usamos variables en lugar de propiedades? Bueno, hay muchos
inconvenientes a la hora de exponer variables pblicas. Dos de los
problemas ms graves son: 1- No podemos hacer un databind de
forma fcil sobre variables pblicas.2- Si exponemos variables
pblicas en nuestras clases, ms tarde no es posible cambiarlas a
propiedades (por ejemplo: para aadir algn tipo de validacin en los
mtodos set) sin tener que recompilar los assemblies que dependan
de la antigua clase.El nuevo compilador de C# que viene con Orcas,
nos proporciona una forma elegante para hacer que el cdigo que
escribamos sea ms conciso mientras mantiene la flexibilidad de las
propiedades usando una nueva caracterstica conocida como
propiedades automticas. Las propiedades automticas nos
permiten evitar la declaracin manual de variables privadas y escribir
el cdigo de los mtodos get/set En lugar de eso, el compilador
puede crear automticamente las variables privadas necesarias y el
cdigo por defecto de los mtodos get/set por nosotros.Por ejemplo,
usando las propiedades automticas podemos reescribir el cdigo
anterior de la siguiente manera:public class Person {
public string FirstName {
get; set;
}
public string LastName {
get; set;
}
public int Age {
get; set;
}
} O si queremos ser ms precisos an, podemos eliminar los
espacios en blanco y llegar ms lejos de la siguiente forma:
public class Person {
public string FirstName { get; set; }
public string LastName { get; set; }
public int
Age
{ get; set; }
} Cuando el compilador de Orcas de C# se
tes", Age = 50 } );
people.Add( new Person { FirstName = "Susanne", LastName =
"Guthrie", Age = 32 } );
List<Person> {
= "Scott", LastName = "Guthrie",
= "Bill", LastName = "Gates", Ag
= "Susanne", LastName = "Guthrie
casos. Para cualquier caso debemos crear esta clase para continuar con el
ejemplo.
Como vamos a trabajar con una solucin de UI de windows y vamos a capturar los
controles que nos enven en esta capa, lo que haremos ser agregar otra
referencia al proyecto CapaNegocio, que referenciar al espacio de
nombre System.Windows.Forms, con esto podremos definir variables de tipo de
controles de objetos.
Ahora si, piquemos cdigo!!!.
return usuario;
}
newusuario, newclave); }
catch (Exception ex) { throw ex; }
}
Ahora, cada uno puede hacer las cosas como le parezca mejor, yo solo les entrego
los lineamientos Base, ya que claramente si depuro este cdigo desde una
perspectiva de reuzabilidad, lo puedo mejorar mucho ms.
Bueno seores, el siguiente paso es crear la UI y con esto podemos probar lo que
hemos hecho, ahunque debo decir, que tal como esta este ejemplo, lo podemos
usar para web, como para windows, ya que como no estamos pasando controles
de objetos a la capa no esta personzalidada la Capa, ms bien esta habierta y se
puede reutilizar en ms ambientes.