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)