ADO.NET Entity Framework: creación de aplicaciones N-Capas!

Una de las cuestiones que más dudas plantea a la hora de considerar ADO.NET Entity Framework como tecnología base para abstraernos del acceso a datos en las aplicaciones que vamos a construir es como de fácil es construir aplicaciones distribuidas con esta tecnología. Como siempre, sobre este tema hay algunos recursos en la red que permiten ver un poco de luz y llegar a la conclusión de que fácil no es, pero se puede hacer. Aquí os dejo una serie de enlaces sobre la creación de aplicaciones N-Capas con ADO.NET EF.

N-Capas en EF 1.0

La primera versión de EF tenía un soporte bastante limitado para la creación de aplicaciones N-Capas. Aún así, hay varios recursos en la red muy recomendables en torno al tema.

Mejoras en EF 4.0

La nueva versión de EF va a traer mejoras en lo que a soporte de n-capas se refiere.

Otros enlaces de interés

ADO.NET EF: + recursos y trabajo con plantillas T4!

Una de las novedades que vienen con la versión 4.0 de ADO.NET Entity Framework es el soporte para trabajar con plantillas T4. Indagando sobre T4, me he dado cuenta de que esta característica tan potente no es nueva de Visual Studio 2010, sino que ya está disponible en versiones anteriores (en concreto en VS 2005 y VS 2008). Os dejo algunos enlaces de interés respecto a EF 4.0, las posibilidades del uso de T4 en la construcción de aplicaciones software y por supuesto su relación con EF.

ADO.NET Data Services: Disponible la actualización para .NET Framework 3.5 SP1!

El equipo de ADO.NET Data Services acaba de liberar la actualización de esta tecnología para .NET Framework 3.5 SP1. Esta actualización permite que podamos utilizar las características de ADO.NET Data Services disponibles en .NET Framework 4.0 y Visual Studio 2010 en Visual Studio 2008 y .NET Framework 3.5 SP1. Los enlaces de descarga de la actualización son los siguientes:

  • Para Windows 7 y Windows Server 2008 R2, puedes utilizar este enlace.
  • Para el resto de versiones de Windows, puedes utilizar este enlace.

Respecto a lo que contiene esta actualización, comentaros que se trata de todas las capacidades que teníamos en ADO.NET Data Services 3.5 incluyendo la posibilidad de realizar consultas contra listas de SharePoint 2010.

.NET Framework 3.5 Chart Controls: Como consumir los datos de un cubo de Analysis Services!

Hace unos meses que tenía pendiente escribir este post sobre como consumir los datos de un cubo de SQL Server Analysis Services (SSAS) dentro de los .NET Framework 3.5 Chart Controls. La verdad es que el tema tiene sus truquillos, aunque por suerte y gracias a alguna ayudita de los chic@s de CIC, conseguí hacer una pequeña prueba de como mostrar datos de un cubo de SSAS en un control de tipo gráfico de los Chart Controls…y de aquí a llevarlo a SharePoint coser y cantar ;-). Básicamente los pasos a seguir de forma resumida son los siguientes:

  • En primer lugar, añadir a nuestra capa de presentación un control de tipo Chart. En mi caso, cogí un proyecto de tipo Web.
  • Añadir a nuestro proyecto una referencia a Microsoft.AnalysisServices.AdmdClient para poder conectaros al cubo y devolver los datos necesarios.

image

  • En la vista de código de nuestra página ASP.NET añadir las referencias necesarias para configurar por un lado el chart control y acceder por otro al cubo de SSAS.

using System.Data;

using Microsoft.AnalysisServices.AdomdClient;

using System.Web.UI.DataVisualization;

using System.Web.UI.DataVisualization.Charting;

using System.Drawing;

  • Configurar de forma adecuada los distintos parámetros del cubo como escala, tipo de gráfico, etiquetas de los ejes, etc. Como esta parte es un tanto pesada, no os replico el código.
  • Probar la consulta al cubo SSAS dentro del SQL Server Management Studio para asegurarnos de que los datos que devuelve son los que esperamos.

image

  • En mi caso, la consulta es:

SELECT NON EMPTY { [Measures].[Internet Sales Amount] }

ON COLUMNS, NON EMPTY { ([Customer].[Country].[Country].ALLMEMBERS *

                        [Customer].[State-Province].[State-Province].ALLMEMBERS *

    [Customer].[City].[City].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION,

    MEMBER_UNIQUE_NAME ON ROWS FROM [Adventure Works] CELL PROPERTIES VALUE,

    BACK_COLOR, FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME,

    FONT_SIZE, FONT_FLAGS

  • Replicar la consulta anterior en un método de la página ASP.NET. En este caso el método tendría que contener al menos el siguiente código:

                CadenaConsulta =

                    "SELECT NON EMPTY { [Measures].[Internet Sales Amount] }"+

                    " ON COLUMNS, NON EMPTY { ([Customer].[Country].[Country].ALLMEMBERS *" +

                    " [Customer].[State-Province].[State-Province].ALLMEMBERS *" +

                    " [Customer].[City].[City].ALLMEMBERS ) } DIMENSION PROPERTIES MEMBER_CAPTION," +

                    " MEMBER_UNIQUE_NAME ON ROWS FROM [Adventure Works] CELL PROPERTIES VALUE, BACK_COLOR," +

                    " FORE_COLOR, FORMATTED_VALUE, FORMAT_STRING, FONT_NAME, FONT_SIZE, FONT_FLAGS";

               

                CadenaConexion =

                    "Provider=MSOLAP.4;Data Source=SHAREPOINT-SSRS;Integrated Security=SSPI;" +

                    "Data Source=SHAREPOINT-SSRS;Initial Catalog=Adventure Works DW";

 

                 //Nos creamos un objeto de tipo CellSet para guardar los resultados de la consulta:

                CellSet CS_Auxiliar;               

 

                //Establecemos la conexión:

                AdomdConnection ADOM_Conexion =

                    new AdomdConnection();

                ADOM_Conexion =

                    this.Establecer_Conexion();

               

                //nos creamos un objeto de tipo ADOMDCommand:

                AdomdCommand ADOM_Control =

                    new AdomdCommand();

                ADOM_Control =

                    new AdomdCommand(CadenaConsulta, ADOM_Conexion);

 

                // Con el método ExecuteCellSet ejecutaremos la consulta que tenemos en ADOMDConsulta.

                // Los resultados se guardarán en un objeto de tipo CellSet:

                CS_Auxiliar =

                    ADOM_Control.ExecuteCellSet();

 

                // Cerramos la conexión:

                this.Cerrar_Conexion(ADOM_Conexion);

 

                // Retornamos el objeto CS_Consulta:

                return CS_Auxiliar;

  • Cómo se puede observar en el código anterior, simplemente:
    • He “pegado” en código la consulta que había probado en el SQL Server Management Studio.
    • A continuación especifico la cadena de conexión al cubo de SSAS. La clave de esta cadena está en especificar el proveedor adecuado (MSOLAP.4 para SSRS 2008), el servidor, fuente de datos y cubo.
    • A continuación se declaramos un objeto de tipo CellSet en el que almacenaremos los resultados devueltos al ejecutar la consulta al cubo de SSAS.
    • Creamos una instancia de AdomdConnection para conectarnos al cubo.
    • Abrimos la conexión al cubo.
    • Creamos una instancia de AdomdCommand a partir de la cadena de consulta al cubo y la cadena de conexión al mismo.
    • A continuación llamamos al método ExecuteCellSet() del objeto anterior para ejecutar la consulta y el resultado lo guardamos en el objeto de tipo CellSet.
    • Finalmente, cerramos la conexión al cubo.
    • Devolvemos el objeto CellSet puesto que será el que utilicemos para alimentar el chart control.
  • Los métodos para abrir y cerrar la conexión al cubo son los siguientes:

        // Método para abrir la conexión:

        private AdomdConnection Establecer_Conexion()

        {

            //Con el objto conexión establecemos la conexión a través de la propiedad

            //cadena de conexión que nos ha pasado el usuario:

            AdomdConnection ACon_Conexion=null;

            try

            {

                ACon_Conexion =

                    new AdomdConnection(CadenaConexion);  

                //Ahora abrimos esa conexión:

                ACon_Conexion.Open();

                string version =

                    ACon_Conexion.ClientVersion;  

                //Retornamos la conexión:

                return ACon_Conexion;

            }

            catch (Exception  ex)

            {

                return ACon_Conexion;

            }

        }  

        // Método para cerrar la conexión:

        private void Cerrar_Conexion(AdomdConnection ACon_Conexion)

        {

            ACon_Conexion.Close();

        }

  • Finalmente, si visualizamos nuestra página ASP.NET, el resultado que obtendremos es el siguiente:

image

Y hasta aquí llega este ejemplo sobre como mostrar datos de un cubo de SSAS en un chart control. Espero que el post os haya resultado interesante.

ADO.NET Data Services 1.5: Disponible para descarga la CTP2!

El equipo de ADO.NET Data Services acaba de anunciar la disponibilidad de la CTP 2 de ADO.NET Data Services v1.5. Como novedad de la segunda CTP de ADO.NET Data Services 1.5, descargable a través de este enlace, comentaros que se asienta sobre .NET Framework 3.5 SP1 y Silverlight 3, si bien las características incluidas formarán parte de la versión final de .NET Framework 4.0. En cuanto a las novedades en sí, os hago un resumen rápido de lo que se comenta en el post que anuncia la disponibilidad de la CTP2:

  • Soporte para proyecciones, de manera que el formato URI de ADO.NET Data Services permite trabajar en cliente y servidor con un subconjunto de las propiedades de una entidad. Además, se añade soporte a LINQ y otras capacidades de los lenguajes .NET como tipos anónimos.
  • El Data Binding se ha extendido para que soporte Two-Way Data Binding.
  • Mejoras a la hora de conocer el número total de registros para una cierta entidad.
  • Feeds amigables, a través de extender el número de elementos ATOM que se pueden mapear con propiedades de una entidad.
  • Soporte para BLOB en el lado del cliente (incluido Silverlight 3).
  • Se ha introducido una nueva interfaz Data Service Provider para habilitar los Custom Providers que terceros puedan escribir e ir de esta forma más allá de Entity Framework, LINQ To SQL o clases .NET arbitrarias.

Os recomiendo también leer las FAQ que vienen con el post.

ADO.NET Entity Framework…listado de proveedores de terceros!

Como sabéis, durante los últimos meses se ha producido un goteo continuo de nuevos proveedores de terceros con soporte de terceros para ADO.NET Entity Framework. Por este motivo, Microsoft ha habilitado una lista de estos proveedores para facilitar su localización:

image image

En cuanto al listado de proveedores, veréis que a día de hoy tenemos los siguientes con soporte para ADO.NET EF:

Devart, que ofrece soporte para ADO.NET EF para BD’s Oracle, MySQl y PostgreSQL.

 

Phoenix Software Solutions, con un proveedor específico de ADO.NET EF para SQLite.

 

 


Npgsql, con un proveedor para PostgreSQL.

 

 


Sybase SQL Anywhere, con soporte para BD’s SQL Anywhere a través de LINQ, eSQL y ADO.NET Data Services.

 

 


IBM, con un proveedor preparado para BD’s DB2, Informix y U2.

 

 

OpenLink Software, con un proveedor para de modo nativo a datos Virtuoso(SQL, XML y RDF) y tablas de Virtuoso vinculadas mediante fuentes externas ODBC y JDBC

 

 


Firebird, en versión beta, se trata de un proveedor de ADO.NET EF preparado para trabajar con BD’s firebird.

ADO.NET Entity Framework: Actualizaciones en la documentación!

Microsoft acaba de realizar una serie de actualizaciones de la documentación de ADO.NET Entity Framework (ADO.NET EF) enfocadas a resolver preguntas frecuentes en el trabajo con entity keys, edición manual de edmx y otros aspectos: