domingo, 10 de enero de 2016

Año nuevo, nuevo diseño, nuevos contenidos



La verdad que el diseño anterior del blog, en tonos verdosos, me parece que no era un muestra del mejor gusto. Incluso el más antiguo, en rojo, me gustaba más.

Pero es que le estaba dedicando tan poco tiempo a este blog, que la verdad me importaba más el poquísimo contenido que le estaba añadiendo, que el formato del continente.

Pero las cosas cambian y, ahora, necesito dos nuevos blog donde publicar nuevo contenido. Este, en donde me voy a centrar en ALM y DevOps, y otro nuevo que se va a centrar en Azure y desarrollo para Cloud.

¿Esto a qué viene? Por un lado intentar cubrir el hueco de los grandes maestros de ALM sobre arquitectura Microsoft, que se están yendo al extranjero o andan desaparecidos. Por otro, mi nuevas responsabilidades en Avanade, que pasan por adquirir un conocimiento profundo en desarrollo para Azure.

Y qué pasa con GenbetaDev y XatakaWindows? Pues XatakaWindows lo he dejado, y GenbetaDev estoy escribiendo poquísimo ya que no me siento motivado. Y menos ahora cuando quiero escribir sobre dos aspectos tan específicos de la tecnología.

En cualquier caso, voy a añadir un gran factor de material multimedia (vídeos en youtube) porque así me lo han pedido y es algo que no he hecho nunca más allá de HangOut.

Bueno, el tiempo dirá si finalmente cumplo mis propósitos para este año.

Feliz año 2016!!

lunes, 4 de enero de 2016

Visual Studio 2015. Build Canceled en proyectos ASP.NET

Hay cosas que no me entran en la mollera, y una de ellas es el ombligocentrismo de algunas herramientas y de la gente que las construye.

Todo esto viene porque desde hace unas semanas, en mi equipo de Avanade, cuando lanzo la compilación de un proyecto ASP.NET, se detiene nada más empezar con un escueto mensaje que dice "Build Canceled."

Lo he probado todo, he desinstalado el VS2015 dos veces y lo he vuelto a montar - Full y con lo mínimo-, y nada. Esto que no tira.

Lo he preguntado por twiter, y solamente un compañero me ha contestado con un chiste (que me ha hecho gracia y todo).

Pero al final San Stack OverFlow me ha salvado la vida.

Hay una extensión de GetNug que permite habilitar el uso de JSLint en Visual Studio 2015; la cual es una librería de análisis estático de calidad de código en JavaScript; y que por defecto está configurada con un parámetro que cancela la ejecución de la compilación.

Así que, raudo cual gacela, he entrado en la administración de Extensiones y Actualizaciones, dentro del menú Herramientas, y he deshabilitado la librería JSLint.

Y todo ha vuelto a la normalidad!!

Espero que sea de ayuda.

martes, 14 de julio de 2015

VAN: ALM. Build Release Management.

Aprovechando que he tenido que aprender, estimar y formar sobre temas de CI y Despliegue automatizado, he aprovechado la invitación de los colegas de AltNet Hispano para dar una charla ("ladrillo del carajo") sobre este tema.







Además, curiosidades del destino, cada vez encuentro más personas llegando a este proceso del ALM y que les vendrá bien este vídeo como una primera referencia.



Espero que sea de utilidad

viernes, 15 de mayo de 2015

Cómo ver la SQL que genera una query en Linq en tiempo de ejecución

Una de las cosas que muchas veces necesito es saber qué cadena SQL me ha construido Linq para explotar la base de datos (MSSQL).

Hay varias herramientas para hacerlo, pero ninguna que yo conozca en tiempo de ejecución que sea más rápida que la Ventana Inmediato.

Lo primero es que debo te tener puesto el punto de ruptura en donde el debuggeador esté dentro del contexto, por ejemplo en el fichero BL desde estoy haciendo llamadas al Entity. Por ejemplo si estoy haciendo un Select y me está dando un pete.

Ctrl + Alt + i y abro la ventana,  y allí escribo algo tal que así:

? documentoBL.GetAll()

Al dar Enter, me saldrá toda la Select que compone GetAll() y podré ver donde está el error.

jueves, 14 de mayo de 2015

Entity Framework – Invalid object name <tablename>

Un error al parecer sencillo que me ha causado un dolor de cabeza.

Tengo una tabla tal que así en la base de datos:

image

Tengo un mapeo tal que así:

using System.Data.Entity.ModelConfiguration;

namespace ResNovae.Manager.DomainModel.Models.Mapping
{
   
public class Clientes_ModuloYesMap : EntityTypeConfiguration<Cliente_ModuloYes>
    {
       
public Clientes_ModuloYesMap()
        {
           
// Primary Key
           
this.HasKey(t => t.id_cliente_modulo);

           
// Table & Column Mappings
           
this.ToTable("Clientes_ModuloYes");

           
this.Property(t => t.id_cliente_modulo).HasColumnName("id_cliente_modulo");
           
this.Property(t => t.id_cliente).HasColumnName("id_cliente");
           
this.Property(t => t.id_modulo_yes_iso).HasColumnName("id_modulo_yes_iso");
        }
    }
}

Y cada vez que lanzo cualquier operación sobre la entidad me devuelve el error de que no encuentra la tabla…

NO LE DES VUELTAS, ES EL NOMBRE DEL MAPEO

Estoy tan acostumbrado a los mensajes crípticos de .NET o de (maldito mil veces) JavaScript, que no me creo cuando un mensaje de error dice exactamente cual es el error.

this.ToTable("Clientes_ModulosYes");

Me faltaba la maldita “s” de Modulos, no Modulo…

miércoles, 11 de marzo de 2015

Linq, select de todos los elementos que estén en un List<string>

Tengo que recuperar de la base de datos todos los registros que en un campo tenga alguno de los valores que tengo almacenados en una lista de string.

public IQueryable<entidad> Obtener(int idCliente, List<string>rango)
        {
           
var ctx = new DataContext();
           
var resultado = from cliente in ctx.Clientes
                                   
where cliente.id_cliente == idCliente
                                     && rango.Contains(cliente.id_rangos.ToString())

                                 
select cliente;
            return resultado ;
        }

Lo que hace esto es seleccionar todos los registros que su campo (int)id_rangos esté dentro de los valores contenidos dentro de la lista de string rango.

El ToString() es para convertir el id_rangos (que es int) a cadena y que pueda ser comparado.