Mostrando entradas con la etiqueta Entity Framework. Mostrar todas las entradas
Mostrando entradas con la etiqueta Entity Framework. Mostrar todas las entradas

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…

lunes, 26 de noviembre de 2012

Donde debe estar la cadena de conexión de las Entidades (EF)

Con este post voy a iniciar una serie de artículos sobre una aplicación WPF que estoy realizando y que me está entusiasmando.

El primer problema, y que he vivido en otras ocasiones es que siempre utilizo una arquitectura de capas y esta vez no iba a ser diferente. Así el proyecto sigue la arquitectura del patrón MVVM, y está compuesto por cuatro proyectos:

  • La Vista
  • El ViewModel
  • Las Entidades (Entity Framework)
  • Los Test

El problema venía que cuando lanzaba el proyecto para recuperar un listado de la base de datos a través del proyecto de Entidades que se encarga del accedo a datos, el proyecto ViewModel me decía que no encontraba la cadena de conexión.

La solución es simple cuando ya la conoces: crea un nuevo fichero App.config en el proyecto de la Vista e introduce en el la cadena de conexión. Así la tendrás disponible para todos los proyectos ya que el punto de entrada, y donde va a buscar esa configuración.

Espero que sea de utilidad.

lunes, 14 de febrero de 2011

HTML.Helper y EF4.0. Evitar los campos nullables.

Estoy construyendo una pequeña aplicación CRUD para aprender y practicar MVC3 + Razor + Entity Framework 4.0. El objetivo es hacer un pequeño programa muy liviano para poder correr en un navegador de cualquier smartphone actual sin necesidad de tener que tener un programa cliente.

Empezando de la manera clásica, primero me he echo mi modelo de datos en sql y después he creado el modelo en EF 4.0. Coser y cantar. Sin los extraños problemas de la versión anterior.

Lo curioso es que algo que me he encontrado y que me sigo encontrando en los diferentes esquemas de datos, es la posibilidad de tener campos nullables en la sql. Y en el EF provocan cierta incomodidad al trabajar con ellos.

Por ejemplo, algo tan sencillo como declarar un helper para poder editar un número se complica si el campo que estamos trayendo es del tipo nullable (int?).

        <div class="editor-field">
@Html.EditorFor(model => model.numeroEntradas)
@Html.ValidationMessageFor(model => model.numeroEntradas)
</div>



Osea, un buen consejo para trabajar más cómodo: haz tus campos en la base de datos “no nullables” y ponle un valor por defecto. Te evitaras dolores de cabeza.