jueves, 24 de septiembre de 2015

Visualizar el estado de las entidades en Entity Framework

Si programas con Entity Framework, tarde o temprano tendrás algún problema al querer saber cuál es el estado de todas las entidades que está siguiendo el contexto.

Claro está que puedes utilizar el método Entry o incluso saber si una propiedad está modificado con un código similar al siguiente:

DbEntityEntry<Customer> entry = context.Entry(customer);

Debug.WriteLine(entry.State);

Debug.WriteLine(entry.Property(p => p.Name).IsModified);

En cualquier caso, ver el estado de todas las entidades y que propiedades han sido modificadas (si es que la entidad ha sido modificada) se puede convertir en una tarea ardua y no trivial.

Para estos casos (yo directamente es un código sin el que no puedo vivir) encontré un día un método extensor de ObjectStateManager (DbContext lo sigue utilizando bajo cuerda) que vuelca toda la información de seguimiento en HTML, bravo!!

Con este nuevo y awesómico método, no hay sesion de debugging que se resista… porque sí, yo depuro y mucho, lo reconozco :)

image

image

He subido un proyecto muy sencillo en github donde se puede ver en un periquete como funciona el asunto.

Un saludo!

miércoles, 9 de septiembre de 2015

Transformaciones de ficheros .config con SlowCheetah

Las transformaciones de ficheros Web.config es algo habitual en proyectos Web. Una transformación consiste en aplicar al fichero Web.config una serie de transformaciones en función de la configuración de compilación seleccionada al publicar.

De serie, VS sólo permite aplicar transformaciones a los ficheros Web.config y además la previsualización de los cambios es algo enrevesada (en mi opinión).

En el menú contextual de cualquier fichero Web.config:

image

Esto agregará tanta ficheros Web.config dependientes como configuraciones de compilación tenga el proyecto:

image

Después de haber publicado el proyecto (y esto conlleva crear un perfil de publicación), tendremos disponible las siguientes opciones en el menú contextual de cualquier fichero .config (no sólo del Web.config).

image

  • Publish Web.config
    • Publica la transformación según el perfil de publicación seleccionado.
  • Preview changes to Web.config
    • Compara lo publicado (Current versión on server) con la transformación (After Publish) según el perfil de publicación seleccionado
  • Replace Web.config from server
    • Reemplaza el fichero Web.config con la versión del servidor

En lo relativo a transformaciones nos interesan las dos primeras opciones, pero “Publish Web.config” implicar tener que publicar primero (aunque sea a disco) y “Preview changes to Web.config” sólo funciona con ficheros Web.config (aunque aparezca las opción para el resto de ficheros .config).

Además, “según el perfil de publicación seleccionado” hace mención al perfil de publicación que esté activo en la ventana “Azure App Service Activity”

image

En líneas generales, no me gusta del todo como soluciona esta problemática VS y lo veo algo lioso (al menos yo lo veo así). La buena noticia es que hay soluciones como es el caso de SlowCheetah.

SlowCheetah aporta lo siguiente:

  • Permite aplicar transformaciones a cualquier fichero .config (no sólo a Web.config).
  • Permite previsualizar las transformaciones de una forma cómoda y sencilla.

Se presenta en dos distintos formatos:

Como extensión de VS nos permitirá añadir a cualquier fichero .config ficheros de transformación dependientes (excepto para Web.config, donde parece no querer pisar a la opción nativa de VS).

image

Lo que hará “Add Transform” es agregar tantos ficheros .config como configuraciones de compilación tengamos y además incluirá también un fichero .config por cada perfil de publicación (lo cierto es que no entiendo el propósito de agregar ficheros para perfiles de publicación, pero su motivo tendrá…).

La primera vez que utilicemos esta opción en el proyecto nos preguntará lo siguiente:

image 

Y en caso de aceptar se llevarán a cabo los siguientes cambios:

  • Instalará el paquete de Nuget SlowCheeath
  • Se agregará el fichero SlowCheetah.Transforms.targets en la ruta del proyecto Properties\SlowCheetah
  • Y modificará el fichero .csproj para hacer uso del anterior fichero de MSBuild

image

Lo bueno de que haya agregado el paquete de Nuget es que si compartimos el proyecto con alguien, ya no será necesario que instale la extensión en su equipo para llevar a cabo las transformaciones.

En cualquier caso, ahora tenemos disponible en cualquier fichero de transformación .config una nueva opción en el menú contextual para previsualizar la transformación de una forma sencilla y clara.

image

Un saludo!