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.

jueves, 6 de noviembre de 2014

Propiedades booleanas cómo texto en MVC Razor

 

Un pequeño truqillo muy molón para evitar renderizar en la vista los horribles valor booleanos 1/0.

Teniendo un Model con una propiedad booleana EstaActivo, lo declaro así en Razor

<td>@(Model.EstaActivo == 0 ? "Si": "No")</td>

Fíjate que estoy utilizando un operador ternario, pero podría utilizar esta estructura para hacer algo más complejo (aunque intento evitar toda lógica de representación en la Vista).

Pequeñito pero muy útil.

miércoles, 22 de octubre de 2014

Lo que viene con C# 6

Cuando un Hangout tiene de invitados a dos MVP de ASP.NET, C# y un MSP, difícil que no salga bien. Pero al final han sido dos horas tremendas de información y conocimiento, que se me han pasado volando y donde tengo material para aprender mucho.



Imperdible.




viernes, 17 de octubre de 2014

Error, TFS 2008 falla al cambiarle la contraseña a la cuenta del servicio

Error retorcido y mala leche que proviene de cuando las cosas se hacían de otra manera en tiempos pasados, Gracias a Dios superados actualmente.

Tengo una máquina virtual con un TFS2013 y otra con un TFS2008. Por motivos que no vienen al caso, he tenido que cambiar la contraseña de la cuenta de servicio (TFSSERVICE) que es la que ejecuta ambas instancias del servidor ALM.

En el 2013 todo funciona correctamente sin ningún problema, pero en el TFS2008 me encuentro que – simplemente – ha dejado de funcionar.