Mostrando entradas con la etiqueta VS2012. LINQ to Entities. Mostrar todas las entradas
Mostrando entradas con la etiqueta VS2012. LINQ to Entities. Mostrar todas las entradas

martes, 7 de febrero de 2017

Como recuperar un objeto de une entidad derivada en ADO.NET Entity Framework con LINQ to Entities.


Cuando tenemos una clase correspondiente a una entidad del ADO.NET Entity Framework y una o varias clases derivadas de ésta y toda la jerarquía se mapea en una sola tabla física, entonces para obtener objetos de una clase derivada mediente LINQ to Entities debemos filtrar por la clase derivada.


En el ejemplo tenemos una clase Animales que se mapea en la tabla AnimalesSet, y una clase derivada Perro. Para obtener un objeto de la clase Perro debemos hacer lo siguiente:


Código en VB.NET :
Dim queryPerro As ObjectQuery(Of Perro) =
        From animalAux As Perro In contexto.AnimalesSet.OfType(Of Perro)()
        Where animalAux.nombre = "Goofy"
        Select animalAux




lunes, 6 de julio de 2015

LINQ to Entities. Problema al utilizar entidades derivadas. LINQ to Entities sólo admite la conversión a tipos de enumeración o primitivos de EDM.


 PROBLEMA 

ERROR EN EJECUCIÓN: No se pudo convertir el tipo 'EntidadX' al tipo 'EntidadY'. LINQ to Entities sólo admite la conversión a tipos de enumeración o primitivos de EDM


Ocurre porque se intenta utilizar una entidad derivada procedente del modelo de datos EDM (cuando estamos haciendo corresponder una tabla con toda unajerarquía de entidades) y que, por tanto, no corresponde exáctamente con una conjunto de datos de nuestras tablas. En nuestro caso la entidad base es EntidadX y la entidad derivada es EntidadY. El conjunto de datos (tabla) correspondientes a las dos entidades (ya que forman una única jerarquía) sería EntidadXSet.


Se mostrará el error de arriba, si intentamos hacer esta consulta:

  Dim qElementosY As ObjectQuery(Of EntidadY) =
            From objetoY As EntidadY In context.EntidadXSet _
            Select objetoY
  Dim listado = qElementosY.ToList)



 SOLUCIÓN 

Deberemos realizar la consulta de la siguiente manera (subrayo las diferencias):


  Dim qElementosY As ObjectQuery(Of EntidadX) =
            From objetoY As EntidadX In context.EntidadXSet.OfType(Of EntidadY)() _
            Select objetoY
  Dim listado = qElementosY.ToList)