ADO.NET Entity Framework 4.1. Aplicaciones y servicios centrados en datos

.Net, ADO.NET 3 Comentarios »

Si hay algo tedioso y repetitivo que como developers llevamos a cabo en cada una de las aplicaciones, es el binding de los datos entre el modelo y la interfaz, y por otro lado la creación de la capa del modelo con la definición de entidades y sus correspondientes accesos a la base de datos. La tarea del binding sobra decir, que Silverlight la simplifica al máximo gracias al data binding y al patron MVVM.   Entity Framework intentará hacer mas  ameno el trabajo con la capa de datos.

Hacia tiempo que mis lecturas tecnológicas pasaron del papel a Google, seguramente por comodidad y tiempo,  pero hace un par de meses llegó a mis manos un ejemplar del libro ADO.Net Entity Framework 4.0. (edicion 4.1 mejorada ya a la venta) (editorial Krasis) de Unai Zorrilla que rompió esta tendencia. No es este mi primer acercamiento al Entity Framework, pero si ha sido ahora cuando este ORM me ha convencido. La lectura tiene gran parte culpa.

Decir que el libro  no es de lectura fácil (o rápida) ya que requiere de conocimientos previos en la materia, y esta dirigido a un perfil medio/alto en lo que a desarrollo orientado a objetos y modelado se refiere. No viene de mas una base en el mundo del  Object Relational Mapping (ORM).

El libro esta compuesto por 5 capítulos, y en función de nuestra prioridad o necesidades podremos alterar su orden.

  • Capitulo 1 Introduccion.
  • Capitulo 2 Entity Data Model
  • Capitulo 3 Entity Client
  • Capitulo 4 ObjectServices y LINQ to Entities
  • Capitulo 5 EF 4.0 en el mundo real

Fundamental, aunque sea a modo recordatorio, el primero de ellos ya que nos pondrá en situación para los capítulos venideros. El segundo nos acerca al Entity Data Model y a todo lo relacionado con la creación de modelos, ya sea partiendo de uno ya existente o bien generándolo desde cero. Decir que cada uno de los capitulos viene con un gran numero de ejemplos y codigo que facilita la asimilacion de los conceptos de una forma clara y concisa.

Ya sabemos como crear nuestros modelos. El tercer capitulo introduce Entity Client, y será nuestro primer acercamiento a las consultas sobre los modelos. Desde mi punto de vista recomiendo saltar el tercer capitulo hasta una vez leido el cuarto. Al ser Entity Client una capa baja en el framework el trabajo se torna pesado, por lo que no conviene desanimar al lector.

En el capitulo cuatro veremos las otras dos posibilidades para consultar nuestros modelos, Object Services y LINQ to Entities. Es aquí donde veremos la potencia y carasteristicas principales del framework. De hecho este es el capitulo que todos estábamos esperando: sabemos como crear modelos y  conocemos las distintas formas de atacarlos (en modo lectura), ahora veamos como persistir los objetos en nuestros modelos (tanto conceptual como físicos). Aprenderemos que es y como gestionar el estado de las entidades, veremos como realizar las operaciones DLM (Insert, Delete y Update) e interceptar los posibles problemas de concurrencia.. Interesante desde el punto de vista de un desarrollador web el apartado de las Entidades Self Tracking Entities y entidades POCO.

El último capítulo, y no hay quinto malo, nos lleva al mundo real, ya que demuestra como aplicar todo lo aprendido a partir del proyecto realizado por Microsoft España: Microsoft NLayer App.

Y después de todo esto por si fuera poco,  nos encontramos con  la inclusión de 5 apendices que complementan perfectamente el contenido del libro.

  • Apéndice A Fundamentos de LINQ
  • Apéndice B Referencia de eSQL
  • Apéndice C Notas de rendimiento de Entity Framework
  • Apéndice D Plantillas T4
  • Apéndice E EDMGEN

Como comenté anteriormente todos los apartados están acompañados de código y ejemplos que podremos descargar de la web. En definitiva creo que se trata de un libro que no hay que tomar a la ligera, a menos que seamos unos eruditos del tema, sino que debemos tomar con paciencia y el Visual Studio bien cerca para ir poniendo en practica cada uno de los puntos que forman el Entity Framework. Es una lectura muy recomendable para todos aquellos que queráis acercaros al EF.

Comentar que el libro se puede comprar directamente via web en la tienda online de Krasis, tanto en versión Papel como en formato PDF.

Nota: Por lo que veo en la web de Krasis, ha salido una version revisada y mejorada del libro que incluye la mejoras aparecidas en la version 4.1 del Entity Framework.

 

Establecer CheckBox a ‘checked’ / true desde Javascript

General, Web Sin comentarios »

Bueno algo tan simple y liviano como sería realizar esta acción desde Javascript se puede complicar si estamos trabajando con Internet Explorer y el elemento no pertenece al DOM.

Por ejemplo, queremos añadir un CheckBox a la página y establecer su valor a checked. Pues bien, si hacemos esto de la siguiente manera, no funciona:

[JS]

 var chk = document.createElement(“INPUT”);
 chk.setAttribute(“type”, “CHECKBOX”);
 chk.setAttribute(“checked”, “checked”);
 td.appendChild(chk);

[/JS]

En cambio si añadimos el objeto al DOM y posteriormente le establecemos el marcado, funciona correctamente.

[JS]

 var chk = document.createElement(“INPUT”);
 chk.setAttribute(“type”, “CHECKBOX”);
 td.appendChild(chk);
 chk.setAttribute(“checked”, “checked”);

[/JS]

Siempre nuestro amigo IE…….

I Máster en Ingeniería Web y Tecnologías RIA

General 1 Comentario »

Pues sí, Braulio se salió con la suya y tiene su Máster.

I Master en Ingenieria Web y Tecnologias RIA

I Master en Ingenieria Web y Tecnologias RIA

Después de mucho trabajo, finalmente la UMA y Braulio Díez consiguieron sacar a la luz un Máster en tecnologías WEB/RIA  que complementa perfectamente los estudios universitarios con las necesidades reales que luego se exigen en la vida real. El máster ha conseguido unir al proyecto un gran  elenco de empresas dispuestas a formar y dar trabajo a los participantes del Máster.

El grupo docente es de lujo, por citar a algunos Antonio J. Nebro, Francisco Gutierrez o Antonio Vallecillos (de buena tinta, puedo decir que si señor, de lo mejor), pero es que si nos fijamos en el equipo de docentes no UMA, no podemos calificarlo por menos de un  FUERA DE CATEGORÍA, 4 MPVs, por dios!!!!!!!!

  • Braulio Díez (Coordinador externo – MVP Silverlight)
  • Hadi Hariri (MVP C#)
  • Bruno Capuano (MVP TFS)
  • Martin Luis (MCT Sharepoint)

El temario está bastante completo, y seguro que no faltará Silverlight por ningún lado. Braulio, podrás encajar jQuery no?, Supongo que en ese aspecto tendré que confiar en Hadi :) .

Mas información aquí.

Añadir Strong Name a DLL de terceros

.Net, General 3 Comentarios »

Nos podemos encontrar en la situación, en el que al  añadir una librería de terceros a nuestro proyecto, al compilar, se produzca un error como este:

Unable to emit assembly: Referenced assembly ‘albloguera.utils’ does not have a strong name.

Esto es debido a que el assembly al cual estamos añadiendo esta DLL está firmado con un Strong Name. Los emsamblados firmados con Strong Name solo pueden hacer referencia a otras librerías firmadas con Strong Name.

Para solucionar el problemilla, vamos a usar la ventana de comandos de Visual Studio.

Visual Studio Tools

1. Crear el fichero de claves. No es necesario, ya que podemos usar el mismo que ya tenemos en nuestro Assembly.

  • sn -k albloguera.snk

2. Obtemos el MSIL (Microsoft Inmediate Language) del assembly.

  • ildasm albloguera.utils.dll /out:albloguera.utils.il

3. Generamos el nuevo Assembly, añadiendo el KeyFile al MSIL

  • ilasm albloguera.utils.il /dll /key= albloguera.snk

jQuery, UpdatePanel y Postbacks

.Net, jQuery 11 Comentarios »

Esto de jQuery se esta convirtiendo en un vicio (compite mano a mano con Silverlight) y conforme más juegas más quieres y más te diviertes. Y si añadimos UpdatePanels, nos divertimos aún más si cabe.

Al usar jQuery, seguramente usaremos el evento Ready para añadir manejadores de eventos, añadir efectos, añadir / quitar clases…. en fin, inicializar los controles de nuestra página.  El evento Ready de jQuery  es un evento que se lanza una vez que todo el DOM de la página ha sido cargado por completo. Por otro lado tenemos los postback parciales provocados por los updatePanels. El cometido de estos controles es evitar la carga completa de la página, es decir, solo actualizar aquellos controles contenidos en el control UpdatePanel. Pero lo que hace realmente no es actualizar los valores de los controles, sino que los sustituye  por otros nuevos, tras lo cual todos los controles que hay en el UpdatePanel perderán las clases y eventos asociados a ellos en la inicialización de la página. Esto incluye tanto controles de servidor como controles de cliente, todos serán reemplazados.

Por ejemplo tomemos como ejemplo este UpdatePanel y controles:

 [html]

Nombre:
Direccion:
CssClass="btnMandatory" onclick="btnAceptar_Click"/>



[/html]

 La inicialización de la página la llevaríamos a cabo normalmente así:

[JS]
       $(document).ready(function () {
            // Inicializacion de controles

       });
[/JS]

De esta manerá todo funciona correctamente, pero solo mientras no pulsemos el botón “Aceptar” que provoca el postpack parcial. Una vez hagamos click, todos los eventos asociados a los controles desaparecerán. Para solucionarlo tenemos que reasignarlos nuevamente, y una forma de hacerlo es añadiendo un manejador al evento que controla cuando un postback asíncrono ha finalizado. Nuestro código podría quedar así:

[JS]
Sys.WebForms.PageRequestManager.getInstance().add_endRequest(Load);

$(document).ready(function () {
Load();
});

function Load() {
$(‘#’ + ‘<%=btnAceptar.ClientID %>‘).attr(‘disabled’, true);
$(‘#’ + ‘<%=lblNombre.ClientID %>‘).attr(‘readonly’, true);
$(‘#’ + ‘<%=lblDireccion.ClientID %>‘).attr(‘readonly’, true);

$(“.inputText”).blur(function () {
$(this).css(“background-color”, “FFFFFF”);
});

$(“.inputText”).focus(function () {
$(this).css(“background-color”, “CCCCCC”);
});

$(“.inputText”).keyup(function () {

if ($(this).val() == ”)
$(‘#’ + ‘<%=btnAceptar.ClientID %>‘).attr(‘disabled’, true);
else {
var nodata = false;
$.each($(“.inputText”), function () {
if ($(this).val() == ”)
nodata = true;
});
$(‘#’ + ‘<%=btnAceptar.ClientID %>‘).attr(‘disabled’, nodata);
}

});

$(‘#’ + ‘<%=btnAceptar.ClientID %>‘).click(function () {
$(‘#’ + ‘<%=lblNombre.ClientID %>‘).attr(‘value’, $(“#txtnombre”).val());
$(‘#’ + ‘<%=lblDireccion.ClientID %>‘).attr(‘value’, $(“#txtDireccion”).val());
});
}
[/JS]

Lo que hemos hecho es envolver todo el código que teníamos en el evento Ready de jQuery en una función, y llamar a esta función tanto en el evento Ready, como cuando el postback asincrono del updatePanel ha terminado.

Una segunda opción sería Inyectar un script desde servidor que invoque a esta nueva función.

[csharp]
protected void btnAceptar_Click(object sender, EventArgs e)
 {
        lblNombre.Text = lblNombre.Text + “–> Validado con Exito”;
        lblDireccion.Text = lblDireccion.Text + “–> Validado con Exito”;
        ScriptManager.RegisterStartupScript(this, GetType(), “”, “Load();”, true);
 }
[/csharp]

Error al multiplicar 2 números en Javascript

Web 1 Comentario »

Es curioso, pero nos podemos topar que al multiplicar dos números con decimales en Javascript no obtengamos el valor esperado. Esto es debido al modo en que javascript realiza esta operación. Que entretenido resultaban esas operaciones en Tecnologia de Computadores, pero hace demasiado tiempo de eso y uno ya no se acuerda. El caso es que Javascript usa la multiplicación en punto flotante.

Para los que gusten mas información en la wikipedia, un servidor se va a limitar a dar la solución.

Tomando como ejemplo:

  • x = 9
  • y = 155.1

al multiplicarlos obtendriamos un valor tal que 1395.899999999, pero el resultado esperado salta a la vista que no es ese. Para corregirlo podemos aplicar la siguiente operación, por ejemplo para 2 decimales:

[js]

var x = 9;

var y = 155.1;

var z = x*y;

var w = Math.round(z * Math.pow(10,2))/Math.por(10,2);

[/js]

Malaga .NET User Group: Silverlight + Javascript

.Net, Silverlight, Web 3 Comentarios »

El pasado 19 de Marzo tuvimos una sesión de Silverlight en el grupo de Usuario de .Net de Málaga. Participé junto al MVP Braulio Diez. Braulio hizo una magnífica presentación de Silverlight y hasta donde podemos llevar esta tecnología. 

Aquí podeis conseguir el material (presentación y ejemplos) que usó Braulio.

Por mi parte hice una pequeña demostración de la integración de una aplicación Silverlight con Javascript.

  • Acceso al DOM de la página
  • Llamar a métodos Javascript desde Silverlight
  • Llamar a métodos Silverligth desde Javascript
  • Acceso a la Sesión de una aplicación asp.Net

SessionSLJS

Aqui podeís descargar la presentación y el código de los ejemplos.

jQuery o Ajax Control Toolkit

.Net, Web 10 Comentarios »

A día de hoy yo no tendría duda sobre cual opción elegir, opción que no tiene que ser mejor que la otra. Realmente, yo enfocaría el dilema mas bien desde el punto de vista de aplicación web AJAX (orientada al servicio), o aplicación web convencional (.net por supuesto), con sus postbacks (o callbacks) y sus Update Panels. (Debería de estar penalizado el uso del control Update Panel :-) )

Ajax Control Toolkit

Esta opción nos deja en el ámbito de una aplicación web .Net tradicional con controles de servidor, por lo que seguramente tendremos el grueso de la aplicación en el servidor. Con esto no quiero decir que no sea posible tener lógica en cliente, pero si que resulta bastante engorroso trabajar con los controles del ajax control tolkit con javascript. Por otro lado no debemos olvidar que son controles de servidor, y que son muy fáciles de usar, pero que cuando se complica el desarrollo y la web,  no se por qué, pero el trabajo se complica.  Otro punto es el peso de las librerías, puf, te echan para atrás. Y un punto no menos importante, si por ejemplo tenemos que hacer una modificación de un Extender, digamos por ejemplo el AutoCcomplete, tendremos que generar un nuevo build y añadir la nueva referencia, y rezar por tener problemas de versiones a la hora de realizar el deploy en el servidor. A modo de anectdota, mencionar que un proyecto en el que estuve trabajando, en cual teniamos un Auto Complete Extender customizado,  tuvimos problemas de referencias cruzadas entre versiones de librerias,  y  con el timestamp del build generado del Extender con la fecha del servidor. Hora del Build X , hora del Servidor de despliegue X-6. Solución, cambiar la hora a la maquina de build y realizar un nuevo build con un timestamp de fecha menor que la hora del servidor web. 

Leer el artículo completo »

Arquitectura en Cliente con Javascript

.Net, Web Sin comentarios »

La mayoría de las veces cuando se define la arquitectura de una aplicación web solo se tiene en cuenta la parte servidor, como si el lado cliente no fuera importante o no existiera. Es verdad que en cliente disponemos de un lenguaje interpretado (no compilado), lo cual hace si cabe un poquito mas complicado el desarrollo,  al no disponer de las ventajas del pre compilado que nos ofrece Visual Studio. Además,  el ordenado del código debería ser un factor importante, ya que la tendencia es tener  un único fichero o script de código Javascritp, y esto siempre  comienza siendo unas pocas líneas para unas cuantas validaciones y va creciendo paulatinamente debido a la no planificación de la arquitectura en cliente o a nuevos requerimientos.

Atajar esto no es fácil, y el artículo no define ningún modelo de arquitectura, pero si unas cuantas pautas de buena conducta que nos ayuden a tener un condigo algo mas limpio y ordenado.

Leer el artículo completo »

Mantener Posición del Scroll después de un postback asíncrono

.Net, General 1 Comentario »

Que divertido es Javascript, y como echaba de menos un proyecto como el de ahora, casi todo en cliente, pero a pelo sin esas maravillosas facilidades que aporta Silverlight…., bueno algunas si, haciendo uso de Framework de AJAX de Microsot. El contenido de este Post es el típico conocimiento que en mi caso nunca me acuerdo y tengo que echar manos de algun proyecto para recuperarlo. Nunca Mais :)

[Javascript]

var xPos, yPos;
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_beginRequest(BeginRequestHandler_scroll);
prm.add_endRequest(EndRequestHandler_scroll);

function BeginRequestHandler_scroll(sender, args) {
 if (document.getElementById(‘gridClientScroll’)) {
        var item = document.getElementById(‘gridClientScroll’);

        xPos = item.scrollLeft;
        yPos = item.scrollTop;
    }
}
function EndRequestHandler_scroll(sender, args) {

    if (document.getElementById(‘gridClientScroll’)) {
        var item = document.getElementById(‘gridClientScroll’);

        item.scrollLeft = xPos;
        item.scrollTop = yPos;
    }
}

[/Javascript]

El código creo que no necesita explicación. Simplemente obtenemos los valores X e Y de elemento con Scroll que queremos persistir después del postback y lo guardamos, para posteriormente, volverlos a establecer. Para ello,   añadimos un manejador de eventos para antes y después del postback asíncrono, de manera que cada uno de ellos ejecute la función que le especificamos.

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Acceder

Switch to our mobile site