martes, 25 de marzo de 2014

Introducción a LINQ

LINQ (Microsoft.NET Language Integrated Query) es a la vez un lenguaje, y una extensión del Microsoft .NET Framework. Fue introducido con la versión 3.5 del Framework de .NET, para constituirse en un puente entre la programación de objetos y trabajar con los datos.

LINQ convierte el acceso a datos y las consultas en un lenguaje construido en Visual Basic o en Visual C#. Provee un modelo consistente para trabajar con los datos sin importar de donde vienen los datos. Por lo tanto la programación con LINQ permite utilizar todas las características propias de la programacion, para hacer el tratamiento de los datos más fácil y consistente.

LINQ cambia la manera en que accedemos y consultamos datos. Antes que LINQ fuera creado, las mayoría de las consultas se escribían y ejecutaban directamente contra la Base datos, por lo que dicho texto SQL dependía fuertemente de la tecnología subyacente.
LINQ posee dos ventajas principales:

  • La primera de ellas es que se realiza un chequeo de los objetos LINQ en tiempo de compilación, por lo que es posible de encontrar y descubrir más facilmente los errores, además de la posibilidad de utilizar IntelliSense para hacer más fácil escribir el código fuente.
  • La segunda, es que provee un modelo consistente para realizar las consultar contra todas las tecnologías de base de datos, y todo tipo de objetos, incluyendo listas, XML, arrays, etc.






LINQ permite realizar consultas a cualquier objeto que soporte la interface, IEnumerable o IEnumerable<T>; lo que serían todas las colecciones de datos, incluídos los DataSet, List<T>, Array y muchos más.

Supongamos que tenemos una lista de objetos Empleado, esta lista es llamada empleados. En dicha lista, por medio de la utilización de LINQ podremos obtener todos los empleados que trabajan en el departamento IT, de la siguiente manera:

IEnumerable<Employee> empQuery = from emp in empleados
                                 where emp.departamento == "IT"
                             select emp;

Los tipos más comunes en los que se puede grabar el resultado de LINQ, son IEnumerable<T> e IQueryable<T>, de todas maneras puede saltarse esta asignación, y utilizar, directamente la palabra reservada var:

var empQuery = from emp in empleados
               where emp.departamento == "IT"
              select emp;

Hay que tener en cuenta, que cuando se asigna la consulta LINQ a una variable sobre es eso, se guarda en la variable, pero no se ejecuta hasta que no se itera a través de la misma, por ejemplo con un bloque foreach

foreach (var emp in empQuery)
{
   Console.WriteLine(emp.departamento);
}

Otras maneras para que la consulta se ejecute, es usar algunas de las funciones de agregación: Count, Max, Average, First.

int cant = empQuery.Count();

También pueden utilizarse los métodos ToList<T> o ToArray<T> para ejecutar la consulta y guardar los resultados en una lista de objetos o en un array.

List<empleado> empQuery = (from emp in empleados
                          where emp.departamento == "IT"                                 select emp).ToList();


viernes, 21 de marzo de 2014

Aplicación ASP.NET MVC y ADO.NET Entity Framework


En esta entrega, realizaremos una primera aproximación al concepto de Entity Framework, para la creación de un modelo que nos permite efectuar tareas de ABMC: Altas, Bajas, Modificaciones y Consultas, o tal se conoce en idioma inglés operaciones CRUD.

El Entity Frameword de ADO.NET (EF) permite crear la capa de acceso a datos de una aplicación, abstrayendo los datos desde la base de datos y exponiendo un modelo mas cercano a los requerimientos de negocio de la aplicación. En el Framework 4.0 de NET, el EF ha sido considerablemente mejorado.

EF implementa el patrón ORM (Mapeo Objeto Relación), mediante el cual los objetos de la base de datos, se mapean con entidades del modelo conceptual de objetos.

Supondremos, que ya tenemos creada nuestra aplicación Web MVC, tal como vimos en entregas previas. 

Como primer paso, debemos crear un modelo de datos, que consistirá en una entidad "Empleado". Este modelo se encargará de realizar la comunicación con la base de datos para la gestión de los mismos.
Para esto, sobre la carpeta Models de nuestro proyecto, realizamos click con el botón derecho, y seleccionamos "Agregar Nuevo Elemento..."
Dentro del cuadro de dialogo, debemos seleccionar la opción Datos, y seleccionar "ADO.NET Entity Data Model".



Debemos determinar si en Entity Data Model , se creará a partir de una  base de datos, o crearemos un modelo vacío, para este caso, dado que ya tenemos la tabla en la base de datos, seleccionaremos la primera opción.



Seleccionamos la conexión a la base de datos, este paso producirá que se almacene dentro del Web.Config, los datos de la cadena de conexión, con el nombre que se determine.




Posteriormente seleccionamos los objetos que incluiremos en el modelo, dado que este será un ejemplo simple y básico, seleccionaremos la Tabla Empleados. Y le colocamos el nombre a nuestro modelo




Luego de este último paso, podremos observar que se creado nuestro Modelo Entidad Relación, dado que es un ejemplo extremadamente simple, vemos que se compone de una única clase.




Realizamos una generación del proyecto, para que se compilen las clases, y podamos relacionarla, con un Controlador, y las Vistas.

Posteriormente, sobre la carpeta "Controllers" Agregamos un nuevo Controlador, le colocamos el nombre, teniendo en cuenta de mantener el sufijo Controllers dentro de su nombre. También seleccionamos la clase del Modelo, y la clase del Contexto de Datos.



Al Agregar el controlador, con la plantilla seleccionado, se creará tanto el controlador, como las vistas que realizan las acciones de Crear / Editar / Borrar y Listar.

Si ejecutamos la aplicación y accedemos dentro de la URL inicial de la aplicación , a la carpeta Empleados, veremos el sistema en ejecución, el cual nos permitirá gestionar los datos de los empleados.

jueves, 20 de marzo de 2014

Estructura de una aplicación ASP.NET MVC

Analizaremos la estructura de carpetas de una aplicación ASP.NET MVC.


Creamos un nuevo Proyecto: ASP.NET MVC 4 Web Application, y lo colocamos un nombre al mismo, por ejemplo: MvcAppWeb.


En el Cuadro de Diálogo seleccionamos la plantilla "Internet Application", y el Motor de Vistas "Razor". También se da la posibilidad de crear un test de prueba unitario, pero por ahora lo dejamos deshabilitado.

De esta manera se habrá creado una aplicación web, la cual ya posee un contenido predefinido, el cual se irá editando para armar la solución deseada. De todas maneras, lo importante en este punto es analizar la estructura de la aplicación ASP.NET MVC.


La estructura de carpetas es igual en toda aplicación MVC (aunque puede ser que de acuerdo a la versión del framework MVC haya carpetas que no estén en una aplicación web), esta convención de nombres y carpetas hace más fácil al desarrollador entender los proyectos MVC.

La aplicación se compone de:

  • Carpetas de Información sobre la aplicación:
    • Properties
    • References
  • Carpetas propias de la aplicación:
    • App_Data: En esta carpeta se almacenan los datos de la aplicación, generalmente bases de datos de Microsoft SQL. Por defecto, al crear la aplicación esta carpeta esta vacía.
    • App_Start: Esta carpeta contiene los archivos de código que se ejecuta, para realizar todas las configuraciones necesarias, al iniciarse la aplicación.
    • Content: Carpeta usada para contenido estático, tal como hojas de estilos CSS, iconos, imágenes, temas.
    • Controllers: Los archivos de clases de controladores se alojan en esta carpeta. MVC requiere que todos los archivos de controladores finalicen con el texto "Controller". Los Controladores son aquellas clases que reciben las peticiones HTTP desde la Aplicación y realizan las gestiones correspondientes.
    • Filters: Carpeta en la cual se ubican los archivos de filtros. Los filtros son clases que permiten incluir comportamiento antes y después de las acciones de los controladores. De esta manera se puede añadir cierta funcionalidad a los controladores evitando reescribir la misma lógica una y otra vez.
    • Images: Esta carpeta contiene imágenes usadas por la aplicación. Debe tenerse en cuenta de que imágenes se alojarán en esta ubicación, ya que si las mismas son imágenes que hacen al aspecto visual de la aplicación deben ir en la carpeta Content, ya que se trata de contenido estático. Supongamos que tenemos una aplicación que muestra la foto de los empleados, dichas fotos se almacenarían en este directorio, ya que se trata de contenido dinámico que depende de los datos de la aplicación.
    • Models: Directorio, que contiene las clases que representan el modelo de la aplicación. Los Modelos son los encargador de manipular los datos de la aplicación.
    • Scripts: En esta carpeta se almacenan todos los archivos javascript (*.js). Es decir todo el código que se ejecuta en la parte del cliente.
    • Views: Aquí se encuentran alojados los archivos de Vistas, es decir todos los archivos relacionados con la "Interface de Usuario" de la aplicación. En la carpeta de Vistas, existe una carpeta por cada controlador existente en la aplicación. También dentro de esta se encuentra la carpeta Shared, la cual posee Vistas que serán reutilizadas en otras vistas, entre ellas _Layout.cshtml la cual posee un comportamiento similar a las MasterPages de los WebForms.
  • Archivos de Configuración:
    • Global.asax: Este archivo es la clase de entrada a nuestra aplicación, a partir del método Application_Start().
    • packages.config
    • web.config: es un archivo XML que posee toda la configuración de la aplicación.