Codepoint

by Trentia Consulting

Consejos para mejorar el rendimiento de tu Entity Framework (II)

Pre-generar las vistas.

Para que una consulta se pueda ejecutar con un Entity Data Model (EDM), el Entity Framework (EF) genera un conjunto de vistas que se utilizan para tener acceso a la base de datos.

El EF genera vistas las primera vez que se ejecuta una consulta, y se mantiene durante toda la vida de  la instancia del ObjectContext, pero este proceso es el más costoso de toda la consulta, ya que tarda aproximadamente un 50% de la operación total.  Por eso, EF premite generar previamente estas vistas e incluirlas en el proyecto compilado, aunque esto también tiene una desventaja, y es que implica que hay que tener las vistas sincronizadas con los cambios del modelo de datos.

Las vistas pre-generadas se validan en tiempo de ejecución para asegurarse de que son coherentes con la versión actual de EDM, pero se puede omitir si el proceso de generación está generando los archivos de asignación y modelo en el directorio de salida (en el Explorador de Modelos, en la ventana propiedades, cambiar la opción "Procesamiento de artefactos de metadatos" a "Copiar en el directorio de resultados" y recompilar).

Para pre-generarlas se usa una herramienta llamada "Generador de EDM", que suele estar en Windows\Microsoft.NET\Framework\v3.5 y se llama EdmGen.exe si no lo encuentras Microsoft facilita su descarga desde aquí).

Para generar las vistas y agregarlas a un proyecto C# se usa esta  herramienta de línea de comandos con un el parámetro de generación de vistas (/mode:ViewGeneration).

"%windir%\Microsoft.NET\Framework\v3.5\EdmGen.exe"     /mode:ViewGeneration     /language:CSharp     /nologo     "/inssdl:MyEntityModel.ssdl"     "/incsdl:MyEntityModel.csdl"     "/inmsl:MyEntityModel.msl"     "/outviews:MyEntityModel.Views.cs"

También se puede hacer desde la Consola de comandos del VS2008 (Inicio -> todos los programas -> MSVS2008 -> VS Tools -> VS2008 Command Prompt).

O bien:

  1. En el Explorador de soluciones, seleccione el proyecto para el que desea especificar el evento de generación.
  2. En el menú Proyecto, haga clic en Propiedades.
  3. Seleccione la ficha Generar eventos.
  4. la ventana Línea de comandos del evento anterior a la compilación, agregue el "evento anterior a la generación" añadir el comando anterior (en azul) sin saltos de línea.
  5. Genere la solución.

Para volver a agregar los archivos de asignación y modelo como recursos incrustados para los proyectos ASP.NET, modifique el parámetro Metadata del atributo connectionString (puede encontrar más información sobre cómo hacer esto en esta entrada anterior de este blog)

Via: How to: Pre-Generate Views to Improve Query Performance (Entity Framework)

Consejos para mejorar el rendimiento de tu Entity Framework (I)

Entity Framework es un conjunto de tecnologías de ADO.NET que posibilita el desarrollo de aplicaciones de software orientadas a datos, que permite a los programadores elevar el nivel de abstracción cuando se trabaja con datos (menos código de acceso, menos mantenimiento, estructura más manejable, y persistencia). Para ello, Entity Framework (EF a partir de ahora),  define objetos a partir del modelo de datos.
Cuanto mayor sea nuestra base de datos y más datos, tablas e interconexiones entre ellas, más importante será mantener una buena política en cuanto al uso del EF, para que su eficiencia y rendimiento sean óptimos. Durante las próximas semanas enumeraré  algunas buenas prácticas que todos deberíamos tener en cuenta cuando generemos nuestro Entity.

Cadenas de conexión 
#; VS 2008; Entity Framework; VS 2010
Cuando se crean los Object Queries se recupera la cadena de conexión del archivo .config, sin embargo, hay otra forma de suministrársela: cuando se instancia el ObjectContext (en la propiedad ConnectionString del objeto EntityConnection).
Ubicación de los metadatos y asignaciones del EDM

Los archivos de metadatos y asignaciones del EDM, frecuentemente se desarrollan ir en el mismo directorio del archivo ejecutable de la aplicación, sin embargo, para mejorar el rendimiento, podemos incluidos la solución. Para ello:
1) Abre el proyecto con el EF
2) Abrir el EDMX.
3) Hacer click en el fondo, y abrir la ventana de propiedades.
4) Cambiar la propiedad Procesamiento de artefactos de metadatos (Metadata Artifact Processing) a Incrustado en el ensamblado de salida (Embed in Output Assemply).
Los recursos embebidos se especifican en la propiedad Metadata del connectionString, de la siguiente forma:

 Metadata=res://<assemblyFullName>/<resourceName>

Además, es mejor no usar caracteres comodín (*) en la propiedad assemblyFullName para evitar que el EF haga una búsqueda de los recursos en todos los lugares especificados.

Debajo, en un extracto de un web.config, se puede ver un ejemplo del parámetro connectionString, con la propiedad metadata, en la que se especifica el ensamblado con nombre

OSK.Core.EntityModel.dll
<connectionStrings>   <add name="OSKEntities"   connectionString="metadata=res://OSK.Core.EntityModel,Version=1.0.0.0,           Culture=neutral,   PublicKeyToken=null/;           provider=System.Data.SqlClient; provider connection string=&quot;
Data Source=DEIMOS;Initial Catalog=OSK;
          Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
</connectionStrings>

Via: Connection Strings (Entity Framework)

Obtener del nombre de usuario a partir del SID

En ocasiones tomamos el nombre de cuenta de Active Directory como identificador del usuario para almacenar información de seguridad para las aplicaciones. Esa no es la forma más correcta de actuar ya que deberiamos utilizar el SID para identificar de forma unívoca al usuario de dominio.

Tambien nos podemos encontrar de forma habitual que las aplicaciones comerciales hacen uso del SID para identificar al usuario, como es el caso de SharePoint, aunque realicen redundancia almacenando ambos datos.

En estos casos, si queremos obtener el nombre de la cuenta de usuario a partir del SID de Active Directory se puede hacer mediante la siguiente instrucción de C#:

string account = new SecurityIdentifier(Sid).Translate(typeof(NTAccount)).ToString();

Aprende a proteger tu Windows 7

El Centro de Seguridad se introdujo con el SP2 de Windows XP como medida de emergencia ante los problemas relacionados con las amenazas provenientes de Internet. El objetivo era garantizar el buen funcionamiento de un sistema operativo cada vez más conectado. De todos modos, en Windows 7 se ha sustituido este Centro de Seguridad por el Action Center o Centro de actividades, que asume todas las funciones del Centro de Seguridad original, junto con otras relacionadas con la estabilidad y el correcto funcionamiento del sistema, incluyendo las alertas y los mensajes de aviso correspondientes. Precisamente, el apartado de las alertas es uno de los más controvertidos, sobre todo por lo intrusivas que pueden ser en ocasiones.

En cualquier caso, el Centro de actividades es un recurso que hay que tener presente para los momentos en los que algo no va bien. Cuando todo funciona, solo lo tendremos en cuenta para las actualizaciones o las tareas de copia de seguridad programadas en el momento de la primera puesta a punto del equipo. Una de las ventajas del Centro de actividades respecto de implementaciones anteriores es la interactividad que proporciona ante problemas. Es decir, no solo informa de la existencia de problemas o conflictos, sino también proporciona acceso a posibles soluciones para los mismos. No siempre proporciona una solución inmediata, pero por lo menos ofrece enlaces adicionales para la resolución de los mismos.

Todas sus opciones

En el Centro de actividades, accesible desde el Panel de control o desde el icono con forma de bandera del área de notificación de la barra de tareas, se localizan los paneles de monitorización de los distintos aspectos relacionados con el sistema. Ya sea directamente o a través de opciones de menú enlazadas con el Panel de control, éste es el repertorio de actividades disponibles para su administración:

  • Firewall de red: monitoriza el tráfico de red y permite establecer políticas y reglas para las aplicaciones y las conexiones, así como para los usuarios.
  • Windows Update: está relacionado con las actualizaciones automáticas.
  • Protección antivirus: monitoriza y administra todos los programas instalados opcionalmente.
  • Protección contra spyware y software no deseado: monitoriza Windows Defender, integrado en Windows 7, así como el software de terceras partes.
  • Configuración de seguridad e Internet: aunque la configuración se realiza desde su propio panel de control, también está accesible desde el navegador Internet Explorer.
  • Control de cuentas de usuario: hace que los permisos de ejecución de las aplicaciones estén dentro de los márgenes seguros para no modificar procesos del sistema. En caso de necesidad, se pueden otorgar permisos de acceso de más alto nivel o desactivar el UAC.
  • Protección de acceso a redes: funcionalidad implementada para su uso en entornos corporativos con servidores de seguridad que definen las políticas para los equipos conectados.
  • Buscar soluciones para los problemas notificados: Windows accede a bases de conocimiento para encontrar soluciones a los problemas que surgen en el equipo.
  • Copia de seguridad: es el apartado dedicado a gestionar todo aquello relacionado con las copias de seguridad de los archivos del sistema y de los usuarios.
  • Buscar actualizaciones: gestiona las actualizaciones disponibles del sistema, ya se trate de actualizaciones críticas u opcionales.
  • Solución de problemas: mantenimiento del sistema.

Novedades Sharepoint 2010 (II)

Continuando con las novedades de Sharepoint 2010, los desarrolladores nos encontramos por fin con soportes importantes para nuestros desarrollos.
Entre ellos destacan:

  • Soporte para LINQ
  • WebParts para Silverlight
  • Developer Dashboard, que nos permitirá exponer información de depuración en cualquier página SharePoint

Novedades Sharepoint 2010 (I)

Después de mucho tiempo recopilando información y hacer nuestros primeros contactos con la nueva plataforma Sharepoint 2010, vamos a ir publicando algunos artículos con sus principales novedades, versiones, ... de lo nuevo que nos depara Sharepoint.
Empezaremos por las novedades principales del producto. Son los siguientes:

• Soporte para otros navegadores además de Internet Explorer
• Interfaz de usuario estilo Office, con Ribbon (aunque podemos desactivarlo) y mucho más sencillo de manejar
• Business Connectivity Services, la evolución del Business Data Catalog y que no solo cambia de nombre. Dos nuevas características fundamentales. Será de lectura-escritura, y podremos consumir esos datos directamente desde aplicaciones Office.
• SharePoint Workspace. Ya comentábamos en un post anterior que Groove tenía los días contados, al menos con ese nombre y así será. SharePoint Workspace es la evolución de Groove, pero centrada en SharePoint, lo que nos pemritirá disponer de cualquier dato (si cualquiera, incluidos los de BDC) offline y poder sincronizarlo de un modo mucho más coherente de lo que hasta ahora podías hacer a través de Outlook, que obviamente no era la herramienta para ello.
• Mejor soporte de media. Dispondremos de un WebPart de Silverlight y una mejor gestión de medios
• Visio Services. Al estilo de Excel Services, nos permitirá interactuar en el navegador con los diagramas Visio. Quizás tenga más impacto, porque hay menos gente con Visio instalado en local que con Excel. Pero además, podremos acceder a orígenes de datos y crear diagramas dinámicos basados en esos gráficos.

Problemas JQuery y ASP.NET Ajax (UpdatePanel)

Con la aparición de JQuery, los desarrolladores hemos descubierto un nuevo mundo de posibilidades. Nos hemos dado cuenta, de que por fin, vamos a dejar de ser meros codificadores a integrar efectos atractivos de diseño a nuestros desarrollos.
Todo hay que decir, que esto de JQuery engancha y es que rápidamente empezaremos a abusar de su uso y sobrecargamos un simple formulario, en una especie de aplicación Silverlight. Y es que la posibilidad que nos brinda de crear menús, tooltips animados y un largo etcetera en solo 3 lineas de código JavaScript tiene que enganchar si o si.
El problema viene cuando después de haberlo probado para valorar sus posibilidades y decidimos colocarlo en el desarrollo que estamos trabajando, nos damos cuenta que no es oro todo lo que reluce.
Me explico, después de colocar nuestra referencia al script JQuery, de colocar nuestros menús, nuestros tooltips animados y ejecutamos nuestra página y lanzamos un UpdatePanel, todo aquello que habíamos anhelado durante tanto tiempo y que creíamos que por fin lo habíamos conseguido, se ha desvanecido, ¿dónde está?

La respuesta es fácil, simplemente no está. Todos nuestros efectos y demás, se ha dejado de interpretar.

Pero tranquilos, como todo en esta vida tiene solución. Únicamente deberemos de recargar toda nuestra batería de script JQuery al finalizar la ejecución del UpdatePanel, para ello deberemos de colocar el siguiente Script en nuestra página ASPX:

Sys.WebForms.PageRequestManager.getInstance().add_pageLoaded(pageLoaded);

	function pageLoaded(sender, args) {

			var updatedPanels = args.get_panelsUpdated();

			// Revisamos que UpdatePanel si es nuestro UpdatePanel quien se ha lanzado
			for (idx = 0; idx < updatedPanels.length; idx++) {
				if (updatedPanels[idx].id == 'MyUpdatePanelID') {
					MiBateriaScripts();
					break;
				}
			}
		}

Al acabarse el PostBack del UpdatePanel, se ejecutará el script MiBateriaScripts(). Esta función de Java, debería contener todos los eventos o controles que hayamos creado en el inicio de JQuery.

Diseño de workflows con SharePoint y Visio 2010

Efectivamente, Visio 2010 entra en el juego del diseño de flujos de trabajo para SharePoint. Si hasta ahora contábamos con SharePoint Desginer y Visual Studio como herramientas de diseño de flujos para SharePoint, ahora hace su aparición esta nueva herramienta.

La verdad que todos nos preguntábamos dónde estaba esa herramienta que debía permitir el diseño visual y sencillo de flujos de trabajo para SharePoint. Otras herramientas de terceros suplían hasta ahora este agujero negro e inexplicable en medio de este gran producto de Microsoft.

El nuevo diagrama de Visio 2010 permite la creación de flujos de forma visual conectando acciones y condiciones a través de la paleta de dibujos.

image01

El diseño nos permite cambiar los textos de cada elemento así como añadir cualquier anotación para documentar el proceso de negocio.

image02

Una vez diseñado el flujo puede ser exportado, previa validación por parte de Visio, a un fichero .vwi que se podrá abrir y tratar dentro de SharePoint Designer 2010, herramienta a la cual Microsoft también ha hecho una correcta actualización, empezando por permitir reutilizar los flujos generados, gran limitación en la anterior versión.

Expression Web 3 SuperPreview

Siempre que desarrollamos una aplicación WEB observamos lo complicado que es ver el mismo resultado para diferentes navegadores (que si IE6 se ve de una manera, que si FireFox de otra, etc).
Si miramos los datos de Octubre 2009, veremos que IE tiene un índice de uso del 37,5%, Mozila FireFox un 47,5%, Google Chrome un 8%, Safari un 3,8% y Opera un 2,3%.

Por tanto, y según estos índices, no podemos descartar la correcta visualización en cada uno de estos navegadores.

Para ello, tenemos una herramienta bastante buena para la comparación y la detección de problemas en los diversos navegadores. Microsoft Expression 3; VS 2010

Esta herramienta se llama Microsoft Web 3 SuperPreview y está dentro de la gama Microsoft Expression 3 (Recordad que con las versiones de Visual Studio 2010 Ultimate y Premium esta herramienta ya viene incorporada)

Vamos a ver un poco su funcionamiento:

1

Desde la pantalla principal, podremos seleccionar entre los diversos navegadores que tengamos instalado en nuestra máquina Mozilla FireFox, IE8, IE7, IE6,...

Y este sería el resultado final de la visualización de los dos navegadores. A través de las ventanas, podemos comparar las interpretaciones que ha realizado cada una del código HTML

2